2009-05-18 2 views
0

이전 작업자가 소켓에서 수행되는 기존 시스템에서 다중 스레드가 읽고 쓰여질 필요가있는 기존 시스템을 유지 관리하고 있습니다. 이전 개발자는 컨트롤에서 뮤텍스. C 소켓 IO 작업을 상호 배제하는 요구 사항이 있습니까? 또는 소켓이 전이중이기 때문에 뮤텍스를 중복 사용합니까? 단 하나의 스레드상호 배제 및 C 소켓

스레드가 객체를 넣는 처리 대기열은 공유 메모리이며 상호간에 그것을 포기해야한다는 것에 대해서는 의문의 여지가 없습니다.

답변

1

소켓은 기본적으로 스레드로부터 안전하지 않습니다. 따라서 여러 스레드에서 읽고 쓰고 있다면 액세스를 잠글 필요가 있습니다 (예 : 뮤텍스 사용).

0

TCP (AF_INET, SOCK_STREAM)의 경우 동기화되지 않은 리더 스레드 (recv)와 작성자 스레드 (send)가 있으면 좋습니다.

하지만 설명에서 알 수 있듯이 코드에서 뮤텍스가 사용 된 이유는 분명하지 않습니다. "이전 개발자"는 소켓이 아닌 네트워킹 프로토콜을 응용 프로그램 프로토콜의 요구 사항으로 동기화 한 것처럼 보입니다. 그렇지 않으면 응용 프로그램 프로토콜은 타의 추종을 불허 요청과 응답의 엉망이 될 수도 있습니다 (여러 스레드가 관련된 경우)

lock 
-> send request 
<- recv reply 
unlock 

lock 
-> send request 
<- recv reply 
unlock 

잠금이 여기에 필요한 전송/RECV 쌍을 동기화 : 많은 응용 프로그램이 통신이 방법을 수행합니다.