1. __sync_bool_compare_and_swap系列是gcc最早內(nèi)置的;
2. __atomic_compare_exchange_n系列是新版gcc內(nèi)置的,支持6種memory order;
3. std::atomic之類的是stl的封裝;
4. 6種mem order,https://www.zhihu.com/question/24301047里講得不錯(cuò),概括下:
memory_order_seq_cst最嚴(yán),memory_order_relaxed最松,通常是用acquire(load時(shí))/release(store時(shí))模式,在該大模式下:
a. 通常是讀用memory_order_acquire,寫用memory_order_release;
b. 如果只是針對單個(gè)變量且該變量沒有依賴的變量,acquire可以弱化為consume;
c. 如果不想?yún)^(qū)分什么單變量多變量或讀寫狀態(tài),簡單點(diǎn)統(tǒng)一用memory_order_acq_rel。