【C++編程】函數compare_exchange_strong


 compare_exchange_strong

函數原型:

bool compare_exchange_weak(T &expected, T desired, std::memory_order success, std::memory_order failure);
bool compare_exchange_weak(T &expected, T desired, std::memory_order success, std::memory_order failure) volatile;
bool compare_exchange_weak(T &expected, T desired, std::memory_order order = std::memory_order_seq_cst);
bool compare_exchange_weak(T &expected, T desired, std::memory_order order = std::memory_order_seq_cst) volatile;
bool compare_exchange_strong(T &expected, T desired, std::memory_order success = std::memory_order failure);
bool compare_exchange_strong(T &expected, T desired, std::memory_order success = std::memory_order failure) volatile;
bool compare_exchange_strong(T &expected, T desired, std::memory_order order = std::memory_order_seq_cst);
bool compare_exchange_strong(T &expected, T desired, std::memory_order order = std::memory_order_seq_cst) volatile;

用法: 原子的比較 *this  和 expect的值,若它們逐位相等,則以 desired 替換前者(進行讀修改寫操作)。否則,將 *this 中的實際值加載進 expected (進行加載操作)。

#include <atomic>
#include <iostream>

std::atomic<int>  ai;

int  tst_val= 4;
int  new_val= 5;
bool exchanged= false;

void valsout()
{
    std::cout << "ai= " << ai
          << "  tst_val= " << tst_val
          << "  new_val= " << new_val
          << "  exchanged= " << std::boolalpha << exchanged
          << "\n";
}

int main()
{
    ai= 3;
    valsout();

    // tst_val != ai   ==>  tst_val is modified
    exchanged= ai.compare_exchange_strong( tst_val, new_val );
    valsout();

    // tst_val == ai   ==>  ai is modified
    exchanged= ai.compare_exchange_strong( tst_val, new_val );
    valsout();
}

 

分析

1. 當ai = 3時,ai不等於 tst_val, 將tst_val 的值設為3,返回false。

2. 當ai= 3時,ai 等於tst_val, 將tst_val 的值設為new_val, 即將5賦值給ai,返回true。

參考資料

1 . std::atomic<T>::compare_exchange_weak, std::atomic<T>::compare_exchange_strong的用法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM