2009-11-08 77 views
1

已更新:是否有線程安全,無鎖且可在所有Linux發行版上使用增量 C或C++中可用的函數?線程安全,無鎖增量功能?

+1

這將是的C++ 0x的一部分時散發出來。 – rlbond 2009-11-08 01:10:14

+0

你說「無鎖」,下面指定的選項是無鎖的。 但它們不是免費的;原子操作需要協調處理器上的所有內核,其中包括刷新緩存。 所以如果你發現你的多線程程序每秒增加這個計數器數千次,原子操作將會對你的性能產生明顯的影響。 – 2009-11-09 12:59:12

+0

@Martin:「在這個世界中沒有任何東西是免費的」,這就是我總是說:-)感謝您的評論:我將使用這個設施的頻率非常低。 – jldupont 2009-11-09 13:16:13

回答

7

GLib有這樣做的功能。你可能會檢查出http://library.gnome.org/devel/glib/stable/glib-Atomic-Operations.html

具體來說,這聽起來像你想g_atomic_int_inc()

+0

我需要將GLib作爲依賴項添加到我的項目中嗎?或者這只是一個.lib? – jldupont 2009-11-08 01:05:52

+1

是的,你需要鏈接到glib,但這不應該是一個問題,因爲它在默認情況下在每個(?)Linux發行版都可用。 – jstedfast 2009-11-08 01:15:16

+1

它僅在裝有GNOME的系統上可用。 – HalfBrian 2009-11-08 01:43:58

4

當前的C和C++標準沒有定義這樣的事情。你的實現可能有一個。

6

我認爲這些是GNU擴展和處理器特定的,但看看GNU C Atomic Builtins

我認爲還有原子「庫」可用,使用內聯彙編等提供此類功能。