За последние 48 часов я пытался понять Multithreading
и Socket Programming
. Я попытался реализовать программирование сокетов и имел успех, когда не использовал многопоточность. Я новичок в обеих темах и поднял 2-3 вопроса о том, что сам стек нуждается в помощи на том же самом.Как использовать Многопоточность, замки, Программирование сокетов
После прибегая к помощи много я нашел article что объясняет Socket Programming
и Multithreading
, но я до сих пор есть много сомнений в этой статье, и застрял в Figure 5
в статье.
private void AcceptConnections()
{
while (true)
{
// Accept a connection
Socket socket = _serverSocket.Accept();
ConnectionInfo connection = new ConnectionInfo();
connection.Socket = socket;
// Create the thread for the receives.
connection.Thread = new Thread(ProcessConnection);
connection.Thread.IsBackground = true;
connection.Thread.Start(connection);
// Store the socket
lock (_connections) _connections.Add(connection);
}
}
В самой последней строке вы можете увидеть lock
было принято и 3-4 строчками выше в delegate ProcessConnection
связан.
На данный момент я не понимаю, как работает этот замок. Что происходит за кулисами при блокировке? Почему автор использовал блокировку здесь? Что было бы, если бы не было блокировки? Как работает процесс ProcessConnection? Что происходит одновременно?
Я запутался со всеми этими вопросами
Я знаю, что есть список вопросов здесь, но это было бы большим подспорьем, если вы могли бы мне помочь в понимании методологии работы с многопоточностью.
'замок (_connections) { Еогеасп (ConnectionInfo сопп в _connections) { если (подключ = соединение!) { conn.Socket.Send ( буфер, BytesRead, SocketFlags.None); } } } 'Это используется для трансляции одного сообщения в каждый сокет? Как объяснено в вашем втором абзаце –
Отличное объяснение, в котором все точки четко указаны. Еще читайте свой ответ, взяв статью как ссылку. Вернусь к вам, когда я прочитаю ее полностью. –
@ Шантану: Да, этот цикл foreach - это тот, который передает принятое сообщение всем другим сокетам. –