2009-05-30 86 views
11

我正在實現一個使用原子(雙)比較和交換指令的無鎖機制。 cmpxchg16b無鎖結構的C++原子操作

我目前正在編寫這個程序集,然後將其鏈接。但是,我想知道是否有一種方法讓編譯器自動爲我做這件事?例如環繞代碼塊'原子地',並讓它去搞清楚如何在底層處理器體系結構中將代碼實現爲原子指令(或者如果底層代碼不支持它,則會在編譯時產生錯誤)?

P.S.我知道,GCC有一些內置插件(至少對於CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

回答

11

已經很好回答了here

C++ 0x標準將提供一些atomic datatypes,主要是使用std :: atomic <>模板的整型和空類型。該文章提到了Boehm's atomic_ops project,您可以立即下載和使用它。

如果不是,你不能在編譯器中實現你的彙編程序嗎?我知道MSVC的內聯彙編程序例程有__asm關鍵字。 Google說yes,gcc can do it too

5

未來「的C++ 0x」標準C++支持原子操作&Ç - 例如見http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html進行了合理的討論。在即將到來的標準獲得批准並得到廣泛實施之前,當然,在編譯器中「無法移植」這種功能是沒有辦法的。如果你對gcc以外的特定編譯器感興趣,也許你可以專門打開另一個關於它們的問題。

+0

不知道如果我錯過了一些東西,但鏈接的文章似乎並不相關。 – bugmenot77 2009-05-31 00:22:59

+0

你是對的,粘貼錯誤的網址 - 現在編輯修復,謝謝! – 2009-05-31 01:52:49