函式
<atomic>

std::atomic_compare_exchange_strong

template (1)
template <class T>bool atomic_compare_exchange_strong (volatile atomic<T>* obj, T* expected, T val) noexcept;template <class T>bool atomic_compare_exchange_strong (atomic<T>* obj, T* expected, T val) noexcept;
過載 (2)
bool atomic_compare_exchange_strong (volatile A* obj, T* expected, T val) noexcept;bool atomic_compare_exchange_strong (A* obj, T* expected, T val) noexcept;
比較並交換包含的值(強)
比較 obj 中包含的值與 expected 指向的值
- 如果相等,則將*包含的值*替換為 val
- 如果不相等,則將 expected 指向的值替換為*包含的值*。

該函式始終訪問*包含的值*進行讀取,並且(如果比較為真)還會替換它。但整個操作是原子的:在讀取其值的那一刻到替換它的時候之間,該值不能被其他執行緒修改。

請注意,此函式直接比較*包含的值*的物理內容與 expected 的內容;對於使用 operator== 比較相等的值,這可能會導致比較失敗(如果底層型別有填充位、陷阱值或同一值的替代表示),儘管這種比較在保留 expected 的迴圈中會迅速收斂,就像通常與 atomic_compare_exchange_weak 一起使用的那樣。

atomic_compare_exchange_weak 不同,此*強版本*被要求在 *expected* 確實與*包含的物件*比較相等時始終返回 true,不允許*虛假故障*。但是,在某些機器上,對於在迴圈中檢查此項的某些演算法,compare_exchange_weak 可能會帶來顯著的效能提升。

有關 atomic 的等效成員函式,請參見 atomic::compare_exchange_strong

引數

obj
指向 atomic 物件的指標。
型別 A 代表其他過載的 *原子型別* (如果庫不實現 *C 風格原子型別* 作為 atomic 的例項)。
expected
指向一個物件,其值將與包含的值進行比較,並且在不匹配的情況下可能被覆蓋包含的值
T 是原子物件中包含的值的型別(atomic 的模板引數)。
val
expected 與*包含的值*匹配的情況下,要複製到包含物件的值。
T 是原子物件中包含的值的型別(atomic 的模板引數)。

返回值

如果 *expected 與*包含的值*比較相等,則為 true
否則返回 false

資料競爭

無資料競爭(原子操作)。該操作使用*順序一致性*(memory_order_seq_cst)。

異常安全

無異常保證: 絕不丟擲異常。

另見