리눅스와 Win32 소켓 API를 모두 사용하고 있습니다. 내 프로그램에서 여러 스레드가 소켓 핸들을 공유합니다. 특히, 복수의 스레드는 send
을 공유 소켓 핸들 (즉, 동일한 포트)로 호출한다. 이 경우 스레드 안전을 위해 잠금을 설정해야합니까? 대답을 찾을 수 없었습니다. 시험을 보지만 경험을 듣고 싶습니다.C 소켓 API는 스레드로부터 안전합니까?
EDIT : 소켓을 통한 전송 데이터는 원자 적 조작이 아닙니다. 확실히 스레드 안전을 위해 뮤텍스를 사용해야합니다. 그러나, 시스템 API 자체 내부 잠금을 가질 수 있는지 궁금 해서요. 그렇다면 우리는 우리 자신의 자물쇠를 넣는 것을 생략 할 수 있습니다.
이 질문은 fprintf
기능에도 적용될 수 있습니다. 나는 그런 시스템 API가 그들 자신의 잠금을 가지고 있을지 궁금해하고있다. 내 경험에 의하면 파일이나 표준 출력 (예 : 일관되지 않거나 예측할 수없는 출력이지만 프로그램이 충돌하지 않음)에 경주가 있었지만 fprintf
을 호출하면 내 프로그램이 죽지 않았습니다. 이는 fprintf
에서 내부 프로그램을 보호하기위한 잠금 장치가 있음을 나타냅니다. 데이터 구조.
같은 소켓에 여러 개의 스레드를 읽고 쓰는 것은 제 생각에는 사실상의 디자인 문제입니다. – theMayer