예를 들어, Windows에서 Windows 메시지, 소켓 이벤트, 비동기 I/O (IOCompletionRoutine) 및 뮤텍스 핸들을 비동기 적으로 기다릴 수있는 MsgWaitForMultipleObjects가 있습니다.pthread를 사용하여 플랫폼에서 비동기 스레드 간 통신을 수행하는 방법
유닉스에서 일부 pthread_mutex가 잠금 해제 될 때 탈주 가능성을 제외한 모든 것을 제공하는 선택/폴링이 있습니다.
이야기 :
내가 여러 소켓, 파이프 또는 파일에 무언가를 메인 스레드를 가지고 응용 프로그램이 있습니다. 이제는 종종 시간이 걸릴 수있는 부업 (db 트랜잭션)이 있으며 때때로 주 스레드에서 동 기적으로 완료되면 소켓의 정상적인 서비스가 중단됩니다. 그래서 별도의 스레드에서 DB 작업을하고 싶습니다. 그 스레드는 유휴 상태 일 때 메인 쓰레드가 어떤 일을하기로 결정할 때까지 뮤텍스를 기다리고 뮤텍스를 풀어서 db 쓰레드가 그것을 잡을 수있게한다. 문제는 db 스레드가 주 스레드가 작업을 완료했다는 것을 어떻게 알릴 수 있는지입니다. 주 스레드는 소켓을 처리해야하므로 pthread_mutex_lock에서 절전 할 여력이 없습니다. 주기적으로 pthread_mutex_trylock을하는 것은 내가하고 싶은 마지막 것입니다. 현재 파이프 사용을 고려하고 있지만 이것이 더 좋은 방법입니까?
네, 질문은 파이프보다 더 저렴한 것입니다. –
pts가 맞으면 파이프를 사용하십시오. 그것은 당신이 묘사 한 것을 (선택/폴링/큐큐 모델) 꽤 잘 맞 춥니 다. –