std::atomic_compare_exchange_weak, std::atomic_compare_exchange_strong, std::atomic_compare_exchange_weak_explicit, std::atomic_compare_exchange_strong_explicit

来自cppreference.com
< cpp‎ | atomic

 
 
原子操作库
类型
原文:
Types
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
atomic(C++11)
atomic_is_lock_free(C++11)
功能
原文:
Functions
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
atomic_store
atomic_store_explicit
(C++11)
(C++11)
atomic_load
atomic_load_explicit
(C++11)
(C++11)
atomic_exchange
atomic_exchange_explicit
(C++11)
(C++11)
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
(C++11)
(C++11)
(C++11)
(C++11)
atomic_fetch_add
atomic_fetch_add_explicit
(C++11)
(C++11)
atomic_fetch_sub
atomic_fetch_sub_explicit
(C++11)
(C++11)
atomic_fetch_and
atomic_fetch_and_explicit
(C++11)
(C++11)
atomic_fetch_or
atomic_fetch_or_explicit
(C++11)
(C++11)
atomic_fetch_xor
atomic_fetch_xor_explicit
(C++11)
(C++11)
原子标志
原文:
Atomic flags
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
atomic_flag(C++11)
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
(C++11)
(C++11)
atomic_flag_clear
atomic_flag_clear_explicit
(C++11)
(C++11)
初始化
原文:
Initialization
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
atomic_init(C++11)
ATOMIC_VAR_INIT(C++11)
ATOMIC_FLAG_INIT(C++11)
内存排序
原文:
Memory ordering
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
memory_order(C++11)
kill_dependency(C++11)
atomic_thread_fence(C++11)
atomic_signal_fence(C++11)
 
在头文件 <atomic> 中定义
template< class T >

bool atomic_compare_exchange_weak( std::atomic<T>* obj,
                                   T* expected, T desired );
template< class T >
bool atomic_compare_exchange_weak( volatile std::atomic<T>* obj,

                                   T* expected, T desired );
(1) (C++11 起)
template< class T >

bool atomic_compare_exchange_strong( std::atomic<T>* obj,
                                     T* expected, T desired );
template< class T >
bool atomic_compare_exchange_strong( volatile std::atomic<T>* obj,

                                     T* expected, T desired );
(2) (C++11 起)
template< class T >

bool atomic_compare_exchange_weak_explicit( std::atomic<T>* obj,
                                            T* expected, T desired,
                                            std::memory_order succ,
                                            std::memory_order fail );
template< class T >
bool atomic_compare_exchange_weak_explicit( volatile std::atomic<T>* obj,
                                            T* expected, T desired,
                                            std::memory_order succ,

                                            std::memory_order fail );
(3) (C++11 起)
template< class T >

bool atomic_compare_exchange_strong_explicit( std::atomic<T>* obj,
                                              T* expected, T desired,
                                              std::memory_order succ,
                                              std::memory_order fail );
template< class T >
bool atomic_compare_exchange_strong_explicit( volatile std::atomic<T>* obj,
                                              T* expected, T desired,
                                              std::memory_order succ,

                                              std::memory_order fail );
(4) (C++11 起)
原子的值进行比较,指出,obj指出,expected的价值,如果这些都是平等的,取代了以前的desired(执行读 - 修改 - 写操作)。否则,加载的实际值所指向的obj*expected(执行负载操作).
原文:
Atomically compares the value pointed to by obj with the value pointed to by expected, and if those are equal, replaces the former with desired (performs read-modify-write operation). Otherwise, loads the actual value pointed to by obj into *expected (performs load operation).
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
内存模型的读 - 修改 - 写和加载操作succfail。 (1-2)版本默认情况下,使用std::memory_order_seq_cst.
原文:
The memory models for the read-modify-write and load operations are succ and fail respectively. The (1-2) versions use std::memory_order_seq_cst by default.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
的弱形式((1)和(3))的功能允许意外失败,即,如果*obj != *expected作为即使它们是相等的。当比较和交换是在一个循环中,弱版本会带来更好的性能,在某些平台上。当一个弱的比较和交换,需要一个循环,一个强大的,强大的一个是最好的.
原文:
The weak forms ((1) and (3)) of the functions are allowed to fail spuriously, that is, act as if *obj != *expected even if they are equal. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms. When a weak compare-and-exchange would require a loop and a strong one would not, the strong one is preferable.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
这些函数定义中的成员函数std::atomic
原文:
These functions are defined in terms of member functions of std::atomic:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
1) obj->compare_exchange_weak(exp, desr)
2) obj->compare_exchange_strong(exp, desr)
3) obj->compare_exchange_weak(exp, desr, succ, fail)
4) obj->compare_exchange_strong(exp, desr, succ, fail)

目录

[编辑] 参数

obj -
指针的原子对象测试和修改
原文:
pointer to the atomic object to test and modify
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
expected -
预期发现的原子对象中的值的指针
原文:
pointer to the value expected to be found in the atomic object
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
desired -
要存储的值的原子对象中,如果是如预期的那样
原文:
the value to store in the atomic object if it is as expected
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
succ -
内存sycnhronization的读 - 修改 - 写操作的顺序,如果比较成功。允许所有的值都.
原文:
the memory sycnhronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
fail -
存储器sycnhronization订货的负载操作,如果比较失败。不能是std::memory_order_releasestd::memory_order_ack_rel并且不能指定更强的顺序比succ
原文:
the memory sycnhronization ordering for the load operation if the comparison fails. Cannot be std::memory_order_release or std::memory_order_ack_rel and cannot specify stronger ordering than succ
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 返回值

的比较结果:true如果*obj等于*expfalse否则.
原文:
The result of the comparison: true if *obj was equal to *exp, false otherwise.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 例外

noexcept specification:  
noexcept
  (C++11 起)

[编辑] 为例

此示例显示了如何比较和交换可以被用来实现无锁追加到一个单向链表
原文:
This example shows how compare-and-exchange may be used to implement lock-free append to a singly linked list
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

void append(list* s, node* n)
{
    node* head;
    do {
        head = s->head;
        n->next = head;
    } while(! std::atomic_compare_exchange_weak(s->head, head, n));
}


[编辑] 另请参阅

原子原子对象与非原子的参数的值的比较,并执行原子交换,如果等于或原子的负载如果不是
原文:
atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(公共成员函数of std::atomic [edit]
以原子的原子对象非原子参数的值替换,并返回旧值的原子
原文:
atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(函数模板) [edit]
专业的std :: shared_ptr的原子操作
原文:
specializes atomic operations for std::shared_ptr
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

(函数模板)
C documentation for atomic_compare_exchange, atomic_compare_exchange_explicit