중요한 섹션에 의해 보호되지 않는 동일한 이벤트 핸들러에서 2 개 이상의 스레드가 Win32 API의 SetEvent를 호출하는 것이 안전합니까?SetEvent는 원자입니까?
1
A
답변
1
하나의 스레드가 스레드를 설정하고 다른 스레드가 스레드를 동시에 설정하면 두 개의 알림을 얻지는 않을 것입니다. 두 번째 것은 True에서 True로 변경 되었기 때문입니다. 걱정이된다면 대신 세마포어를 사용하십시오.
0
동일한 이벤트에서 동일한 스레드가 대기중인 것으로 가정하면 동일한 코드가 실행됩니다.
- 코드가 처리를 완료 할 때까지 이벤트를 지우지 않으면 효과적으로 CS가 발생합니다. 이벤트가 지워질 때까지 이벤트가 신호로 남아 있기 때문에 (자동 리셋이 아님), 다중 스레드 신호를 보내는 것은 CPU를 스핀하는 것 외에는 아무것도하지 않습니다.
- 처리가 시작될 때 코드가이를 지우거나 이벤트가 자동 설정되면 동일한 스레드가 여러 스레드에서 동일한 기능을 수행하게됩니다. 이러한 스레드가 공유하는 경우 안전하지 않습니다.
0
여러 스레드에서 SetEvent를 호출하는 데 대한 제한이 없습니다.
관련 문제
- 1. mq_send가 원자입니까?
- 2. fwrite 원자입니까?
- 3. 은 rcleartool 체크 인 원자입니까?
- 4. SetEvent는 대기중인 스레드를 하나 또는 모두 차단 해제합니까?
- 5. 자바 원시적 인 int는 의도적으로 또는 우연히 원자입니까?
- 6. 여러 개의 인수가 주어지면 File #은 어둡지 않은가?
- 7. NSObject의 retain 메소드가 원 자성입니까?
- 8. nodejs의 동시성 모델
- 9. 정말 64 비트 머신에서도 참조가 할당됩니까?
- 10. Java 원시 메소드 호출은 원자 호출입니까?
- 11. Windows 이벤트에서 대기중인 스레드가 잠자기에서 깨어나려면 CPU에서 예약해야합니까?
- 12. 중첩 된 선택 원자 작업으로 업데이트합니까?
이 링크를 살펴보면 다음과 같이 우려 할 수 있습니다. http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey