过去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