2012-05-02 52 views
14

爲什麼is_lock_free需要一個實例(它是一個成員函數)的原因是什麼?爲什麼不是這個類型的元函數,還是一個靜態的constexpr成員函數?爲什麼is_lock_free是成員函數?

我正在尋找爲什麼有必要的實際實例。

+0

它被命名爲「is_instance_free」嗎? QED號。 –

+6

看起來是因爲表現[引自這裏](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html):'該提案提供無鎖查詢單個對象上的函數而不是整個類型,以允許不可避免的未對齊的原子變量,而不會影響對齊的原子變量的性能# –

+2

@JesseGood聽起來像一個答案。爲什麼是評論? ;) –

回答

23

該標準允許一個類型爲有時無鎖。

部分29.4 無鎖財產

原子_..._ LOCK_FREE宏表示 相應的原子類型的無鎖特性,與組合在一起的符號和無符號變種 。這些屬性也適用於原子模板的相應 (部分)專業化。值爲0 表示這些類型從不鎖定。 值爲1表示 這些類型有時是無鎖的。值爲2表示 類型始終是無鎖的。

C++ atomic paper n2427狀態背後的原因:

...該提案提供了運行時無鎖的查詢功能,而不是 編譯時間常數,因爲 平臺的後續實現可升級鎖定操作無鎖操作,所以 系統通常會將這些設備抽象到動態庫後面,我們希望保持這種可能性的開放性。此外, 我們建議沒有硬件原子支持的實現使用 該技術。 ...

而且也(爲Jesse Good指出):

該提案提供單個對象無鎖的查詢功能,而不是整個類型,以便允許不可避免的錯位原子變量沒有懲罰的性能對齊的原子變量

+0

我已在其他報價中添加完整性。 – Pubby

+0

當然。這部分也與你的問題有關。我錯過了。 – user2k5

+0

我也可以想象一個具有固定數量的原子值或者其他的實現。 – Yakk

相關問題