C++ CAS 操作
生活随笔
收集整理的這篇文章主要介紹了
C++ CAS 操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C++ 中的 CAS 操作用于操作原子變量,它是 atomic<T> 的成員函數(shù)。
#include <atomic>template <class T> struct atomic; bool compare_exchange_weak(T& expected, T val,memory_order sync = memory_order_seq_cst) volatile noexcept;將當前原子變量的內容與 expected 相比較,
- 如果兩者相等,則更新當前原子變量的內容為 val,并返回 true ;
- 如果不相等,則將 expected 更新為當前原子變量的內容,并返回 false 。
需要注意的是:在進行判等操作時,它執(zhí)行的是物理上的比較,即直接比較內存值,而不是使用 T 的 == 操作符進行比較。
此外,它允許虛假失敗,也就是當前原子變量的內容與 expected 相等,但是它仍然返回 false ,但它不會修改 expected 。
它需要放在循環(huán)中使用。
如,
struct Node { int value; Node* next; }; std::atomic<Node*> list_head(nullptr);// 插入節(jié)點到表頭 void insert(int val) {Node* oldHead = list_head;Node* newNode = new Node{ val,oldHead };while (!list_head.compare_exchange_weak(oldHead, newNode)) {newNode->next = oldHead;} } bool compare_exchange_strong(T& expected, T val,memory_order sync = memory_order_seq_cst) volatile noexcept;與 compare_exchange_weak() 大致相似,只是它不允許發(fā)生虛假失敗。
總結
以上是生活随笔為你收集整理的C++ CAS 操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【读码JDK】- java.lang.D
- 下一篇: 打开计算机硬盘有声音,硬盘吱吱响怎么回事