2008-11-05 79 views
1

是否有2個或更多的線程在同一個事件處理程序中調用Win32 API的SetEvent時不安全?SetEvent是原子嗎?

+1

看看這個鏈接,它可能會解決您的疑慮:http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey 2009-05-26 20:03:48

回答

1

這是安全的,但要記住,如果一個線程設置它,另一個線程同時設置它,你不會得到兩個通知,只有一個;因爲第二個將它從True改爲...是真的。如果你擔心這個問題,請使用Semaphores。

0

假設您有多個線程正在等待相同的事件,運行相同的代碼。

  1. 如果您的代碼在完成處理之前未清除該事件,那麼您實際上擁有一個CS。由於事件一直處於信號狀態,直到它被清除(又稱爲非自動復位),除非旋轉CPU,否則多線程會發出信號。
  2. 如果你的代碼在處理開始時清除它,或者事件是autorset,那麼你將有多個線程運行相同的函數,如果這些線程共享任何東西,這是不安全的。
0

從多線程調用SetEvent沒有限制。