過去48小時,我一直試圖瞭解Multithreading
和Socket Programming
。我試圖實現套接字編程,並在不使用多線程時取得了成功。我對這兩個主題都很陌生,並且在堆棧本身提出了2-3個問題,需要相同的幫助。如何使用多線程,鎖,套接字編程
google搜索了很多後,我發現了一個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) { 的foreach(ConnectionInfo康恩在_connections) { 如果(參數conn =連接!) { conn.Socket.Send( 緩衝器,bytesRead,SocketFlags.None); } } }'這已用於向每個套接字廣播相同的消息?正如您在第二段 – 2010-06-29 13:57:05
中解釋的那樣,很好的解釋,在這裏明確所有要點。仍然閱讀您的答案,並將文章作爲參考。當我完全閱讀時會回覆給你。 – 2010-06-29 13:59:19
@Shantanu:是的,那個foreach循環是將收到的消息廣播到其他每個套接字的環。 – 2010-06-29 14:08:23