이전 작업자가 소켓에서 수행되는 기존 시스템에서 다중 스레드가 읽고 쓰여질 필요가있는 기존 시스템을 유지 관리하고 있습니다. 이전 개발자는 컨트롤에서 뮤텍스. C 소켓 IO 작업을 상호 배제하는 요구 사항이 있습니까? 또는 소켓이 전이중이기 때문에 뮤텍스를 중복 사용합니까? 단 하나의 스레드상호 배제 및 C 소켓
스레드가 객체를 넣는 처리 대기열은 공유 메모리이며 상호간에 그것을 포기해야한다는 것에 대해서는 의문의 여지가 없습니다.
이전 작업자가 소켓에서 수행되는 기존 시스템에서 다중 스레드가 읽고 쓰여질 필요가있는 기존 시스템을 유지 관리하고 있습니다. 이전 개발자는 컨트롤에서 뮤텍스. C 소켓 IO 작업을 상호 배제하는 요구 사항이 있습니까? 또는 소켓이 전이중이기 때문에 뮤텍스를 중복 사용합니까? 단 하나의 스레드상호 배제 및 C 소켓
스레드가 객체를 넣는 처리 대기열은 공유 메모리이며 상호간에 그것을 포기해야한다는 것에 대해서는 의문의 여지가 없습니다.
소켓은 기본적으로 스레드로부터 안전하지 않습니다. 따라서 여러 스레드에서 읽고 쓰고 있다면 액세스를 잠글 필요가 있습니다 (예 : 뮤텍스 사용).
TCP (AF_INET, SOCK_STREAM)의 경우 동기화되지 않은 리더 스레드 (recv)와 작성자 스레드 (send)가 있으면 좋습니다.
하지만 설명에서 알 수 있듯이 코드에서 뮤텍스가 사용 된 이유는 분명하지 않습니다. "이전 개발자"는 소켓이 아닌 네트워킹 프로토콜을 응용 프로그램 프로토콜의 요구 사항으로 동기화 한 것처럼 보입니다. 그렇지 않으면 응용 프로그램 프로토콜은 타의 추종을 불허 요청과 응답의 엉망이 될 수도 있습니다 (여러 스레드가 관련된 경우)
lock
-> send request
<- recv reply
unlock
lock
-> send request
<- recv reply
unlock
잠금이 여기에 필요한 전송/RECV 쌍을 동기화 : 많은 응용 프로그램이 통신이 방법을 수행합니다.