我想使用海灣合作委員會內置函數__atomic_compare_exchange()
但我需要它稍微不同於它所指定的,我不確定它可能實現。海灣合作委員會內部原子比較和交換
的函數原型:
__atomic_compare_exchange(type *ptr, type *expected, type *desired, bool weak, int success_memmodel, int failure_memmodel)
它以原子比較ptr
到expected
並寫入desired
到ptr
如果ptr
== expected
我想要實現的是非常相似,但我expected
是!= NULL
,基本上我想檢查是否ptr != NULL
,如果那是真的,則將desired
寫入ptr
。
可以這樣做嗎?
這裏是關於它的使用GCC:
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
但後來我失去了原子性,對我來說重要的是讀取比較和寫在一起是原子。如果不存在競爭條件,其中數據可以在讀取,比較和寫入之間改變 – 2014-12-07 05:41:56
不,您不會失去原子性。這就是整個問題。原子比較和交換爲您提供了通過此方法進行的任何原子操作。如果數據在讀取舊值(以獲得「期望」)和原子cas之間發生變化,則cas失敗並重新開始。 – 2014-12-07 05:50:22