2012-09-25 18 views
0

是否存在任何的gcc擴展以原子不喜歡GCC原子擴展用於存儲和遞增

操作A = B ++中C.使用一個互斥似乎是這樣一個簡單的操作的矯枉過正。

+1

一個快速谷歌搜索止跌回升[這](http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/_005f_005fsync-Builtins.html#_005f_005fsync-Builtins)在第一個條目中。 –

+0

我確實看過那個網頁,但它對我的查詢沒有幫助。您可以使用這些擴展以原子方式執行(b ++)操作,但在該頁面中未執行a = b ++。 – 0xhacker

回答

2

您不需要使用任何擴展名;只需使用<stdatomic.h>

#include <stdatomic.h> 

atomic_store(&a, atomic_fetch_add(&b, 1)); 
+0

它看起來好像獨立的atomic_store和atomic_fetch_add是原子的,但它們一起是原子嗎? – 0xhacker

+0

@ mc_87這取決於你的意思是「原子」;但由於默認排序是順序一致性,並且存在從'b'到'a'的依賴關係鏈,所以可以保證沒有其他線程能夠看到'a'的新值和'b'的前一個值。那是你要的嗎? – ecatmur

+0

對不起,我應該給我更多的細節。這裏a是一個私有變量,b是一個共享變量。 – 0xhacker