2008-11-05 4 views
1

중요한 섹션에 의해 보호되지 않는 동일한 이벤트 핸들러에서 2 개 이상의 스레드가 Win32 API의 SetEvent를 호출하는 것이 안전합니까?SetEvent는 원자입니까?

+1

이 링크를 살펴보면 다음과 같이 우려 할 수 있습니다. http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey

답변

1

하나의 스레드가 스레드를 설정하고 다른 스레드가 스레드를 동시에 설정하면 두 개의 알림을 얻지는 않을 것입니다. 두 번째 것은 True에서 True로 변경 되었기 때문입니다. 걱정이된다면 대신 세마포어를 사용하십시오.

0

동일한 이벤트에서 동일한 스레드가 대기중인 것으로 가정하면 동일한 코드가 실행됩니다.

  1. 코드가 처리를 완료 할 때까지 이벤트를 지우지 않으면 효과적으로 CS가 발생합니다. 이벤트가 지워질 때까지 이벤트가 신호로 남아 있기 때문에 (자동 리셋이 아님), 다중 스레드 신호를 보내는 것은 CPU를 스핀하는 것 외에는 아무것도하지 않습니다.
  2. 처리가 시작될 때 코드가이를 지우거나 이벤트가 자동 설정되면 동일한 스레드가 여러 스레드에서 동일한 기능을 수행하게됩니다. 이러한 스레드가 공유하는 경우 안전하지 않습니다.
0

여러 스레드에서 SetEvent를 호출하는 데 대한 제한이 없습니다.