지난 48 시간 동안 Multithreading
및 Socket Programming
을 이해하려고 노력했습니다. 멀티 쓰레딩을 사용하지 않을 때 소켓 프로그래밍을 구현하고 성공했다. 나는 두 주제에 익숙하지 않으며 같은 주제에 대해 도움이 필요한 스택 자체에 2-3 가지 질문을 제기했다. 멀티 스레딩, 잠금 장치, 소켓 프로그래밍 사용 방법
Socket Programming
및
Multithreading
설명하는
article을 발견,하지만, 난 여전히이 문서에 의심의 여지가와 기사에서
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
촬영 된과 delegate ProcessConnection
위의 3-4 라인이 결합되어 볼 수 있습니다.
이 시점에서이 잠금이 어떻게 작동하는지 명확하지 않습니다. 자물쇠가 채취 된 뒤에서 무슨 일이 일어나고 있습니까? 저자는 왜 여기에 자물쇠를 사용 했습니까? 자물쇠가 잡히지 않으면 어떻게 됐을까요? 스레드 ProcessConnection은 어떻게 작동합니까? 동시에 어떤 일이 일어나고 있습니까?
나는 모든 질문에 내가 질문 목록 여기가 알고 와 혼동있어,하지만 당신은 멀티 스레딩 작업의 방법론을 이해 도와주세요 수 있다면 큰 도움이 될 것입니다.
'로크 (_connections) { 의 foreach (_connections에에서 ConnectionInfo CONN) { 경우 (코네티컷 = 접속!) { conn.Socket.Send ( 버퍼 bytesRead, SocketFlags.None); } } } 이것은 모든 소켓에 동일한 메시지를 브로드 캐스트하는 데 사용 되었습니까? 귀하의 두 번째 단락에서 설명한 바와 같이 –
위대한 설명, 여기서 모든 점을 명확하게. 기사를 참고 자료로 사용하면서 답변을 읽는 중. 내가 그것을 완전히 읽을 때 당신에게 돌아갈 것입니다. –
@Shantanu : 예, foreach 루프는 수신 된 메시지를 다른 모든 소켓으로 브로드 캐스팅하는 루프입니다. –