setevent는 원자가입니까?
-
06-07-2019 - |
문제
2 개의 스레드가 임계 섹션으로 보호되지 않는 동일한 이벤트 핸들러에서 Win32 API의 SetEvent를 호출하는 것이 안전합니까?
해결책
안전하지만 한 스레드가 설정되고 다른 스레드가 동시에 설정되면 두 개의 알림을받지 못할 것입니다. 두 번째는 그것을 true에서 ... true로 변경했기 때문에. 이것에 대해 걱정이되면 세마포어를 대신 사용하십시오.
다른 팁
동일한 이벤트를 기다리는 여러 스레드가 있다고 가정하면 동일한 코드를 실행합니다.
- 코드가 처리가 완료 될 때까지 이벤트를 지우지 않으면 CS가 효과적으로 있습니다. 이벤트는 청소 될 때까지 (일명 Autoreset이 아닌) 신호를받지 않기 때문에 여러 스레드가 CPU를 스핀하는 것 외에는 아무것도하지 않습니다.
- 처리 시작시 코드가 지우거나 이벤트가 AutorSet이면 동일한 기능을 실행하는 여러 스레드가 있으면 이러한 스레드가 공유 할 경우 안전하지 않습니다.
여러 스레드에서 SetEvent를 호출하는 데 제한이 없습니다.
제휴하지 않습니다 StackOverflow