2009-12-07 20 views
1

RegisterWaitForSingleObject文檔說使用ThreadPool.RegisterWaitForSingleObject的事件安全嗎?

使用的waitObject互斥不 提供的 回調互斥,因爲基礎Win32 API使用默認WT_EXECUTEDEFAULT 標誌,所以每次回調分派 在一個單獨的線程池線程。 取而代之的是互斥的,使用信號燈 與1

和最大計數(爲WaitHandle的參數的文件中),它說

使用WaitHandle的以外互斥

這似乎意味着使用事件是安全的 - 是嗎?

使用AutoResetEvent和ManualResetEvent會有什麼區別嗎?

回答

2

事件很好。我想我只使用過的事件,用這種方法

再自動與手動重置事件中,documentation for the underlying Win32 API說,只有這標誌着等待結束的對象會受到影響:

函數修改某些類型的同步對象的狀態爲 。 修改只發生在 對象或其信號狀態爲 導致函數返回的對象上。

手動復位事件不會改變狀態,除非您手動完成,手動;我希望自動重置事件只有在導致等待完成的自動重置事件時纔會重置。如果您有兩個自動重置事件同時發出信號,您只會注意到這一點。

2

AutoResetEventManualResetEvent都來自WaitHandle這是在這裏規定的用例。所以是的,使用這兩個類是安全的(如果在課程文檔的指導方針中使用)。