我對Win32上的POSIX樣式條件變量有所期望。我有一些代碼需要在XP上運行,所以我無法使用Vista/Server 2008的CONDITION_VARIABLE
。針對XP的Winthreads實現CRITICAL_SECTIONs的條件變量
當前使用了一個僞條件變量類,它基於離開關鍵部分併發信號通知/喚醒的自動重置事件。爲了等待條件變量,它將臨界區WaitForSingleObject
置於事件上,然後重新進入臨界區。這很好,但它不支持廣播,可能還有其他關於公平的問題,我不太在意。
我們使用boost,所以我知道我可以使用boost線程或pthreads-win32,它支持條件變量,但理想情況下我希望這個接口能夠在/如果它可以放入Microsoft實現中變得可以直接使用它。我已經看到Strategies for Implenting POSIX Condition Variables on Win32,但「最好」(最正確的)解決方案使用Mutex而不是CRITICAL_SECTION
。在second part中有一個CRITICAL_SECTION
的實現草圖,但它不完整,其他解決方案由於我們在文章中爲他們概述的問題而關注我。
簡而言之,如何在關鍵部分的win32條件變量上實現正確的,不一定公平的(但那樣會很好),這樣我就可以在微軟的實現中放棄它的條件變量?
看起來不錯!非常感謝。 – 2009-08-05 23:49:37