在我們的應用,有一種大量使用的win32把手,使用CreateEvent,SetEvent的/ ResetEvent,以便執行同步機制。的win32把手和多線程
我的一位同事問我,如果訪問該手柄的事件是線程安全的。
我無法回答,因爲句柄不是線程任何GDI對象安全...
但由於事件旨在實現多線程同步的,我無法想象他們arent線程安全的。
你能否證實?
在我們的應用,有一種大量使用的win32把手,使用CreateEvent,SetEvent的/ ResetEvent,以便執行同步機制。的win32把手和多線程
我的一位同事問我,如果訪問該手柄的事件是線程安全的。
我無法回答,因爲句柄不是線程任何GDI對象安全...
但由於事件旨在實現多線程同步的,我無法想象他們arent線程安全的。
你能否證實?
所有處理您Kernel32中功能獲得是線程安全的,除非MSDN庫文章的功能,明確提到它不是。有一個簡單的方法可以告訴你的代碼,這個句柄是用CloseHandle()關閉的。
你用做什麼與句柄可能不一定是線程安全的,當你調用SetEvent()兩次但WaitForSingleObject()只調用一次時,Windows將無法幫助。這可能是您的程序中的線程競賽,具體取決於您如何使用該事件。
取決於手柄的類型。
同步手柄(像一個由CreateEvent創建)是通過定義線程安全的。 一個文件句柄,當被多個線程同時寫入時,並非如此。
對於它的價值,GDI和USER32手柄是一個完全不同的野獸比內核處理:他們確實有在名稱把手,是不透明的值,但他們是在幕後完全不同。而且,GDI處理並不是線程安全的,它們中的一些可能具有線程*關係*,或者需要從某個線程使用。不過,這是一個與thread * safety *不同的概念。 – BrendanMcK
不是線程安全的事件句柄會非常沒用。你打算如何使用該事件發出另一個線程的信號,如果這樣做不安全? – Damon