2010-02-23 34 views
2

這讓我很困惑。條件變量是如何實現的?

給定基本原子基元像比較&交換,我可以看到如何實現自旋鎖(從中我可以建立互斥鎖)。

但是,我沒有看到我可以如何建立條件變量。這是如何完成的?

回答

2

這不是特別簡單。以下是由Douglas Schmidt撰寫的一篇文章的鏈接(他也主要負責ACE庫),詳細介紹了幾種使用Win32(Vista之前版本)中可用的同步原語在Windows上實現條件變量的方法。該方法包括只使用基本的,一般可用在任何操作系統原語,並討論了方法的各種限制:

底線(結束語):

本文闡述了爲什麼在Win32平臺上開發條件變量很棘手且容易出錯。有幾個微妙的設計力量必須由開發人員解決。總的來說,我們研究的不同實現根據其正確性,效率,公平性和可移植性而有所不同。沒有一個解決方案能夠最佳地提供所有這些品質。

3.4節中的SignalObjectsAndWait解決方案是一個很好的方法,如果公平是最重要的。但是,這種方法並不像其他解決方案那樣高效,也不像便攜式那樣。因此,如果效率或可移植性比公平性更重要,則3.2節中描述的方法可能更合適。當然,最簡單的解決方案是微軟只需在Win32 API中提供條件變量。

注意,開始在Vista中,Windows使用原生API支持條件變量