std::atomic_...<std::shared_ptr>
STD::原子[医]...<STD::Shared[医]PTR>
template< class T > bool atomic_is_lock_free( const std::shared_ptr | (1) | (since C++11) |
---|---|---|
template< class T > std::shared_ptr<T> atomic_load( const std::shared_ptr<T>* p | (2) | (since C++11) |
template< class T > std::shared_ptr<T> atomic_load_explicit( const std::shared_ptr<T>* p, std::memory_order mo | (3) | (since C++11) |
template< class T > void atomic_store( std::shared_ptr<T>* p, std::shared_ptr<T> r | (4) | (since C++11) |
template< class T > void atomic_store_explicit( std::shared_ptr<T>* p, std::shared_ptr<T> r, std::memory_order mo | (5) | (since C++11) |
template< class T > std::shared_ptr<T> atomic_exchange( std::shared_ptr<T>* p, std::shared_ptr<T> r | (6) | (since C++11) |
template<class T> std::shared_ptr<T> atomic_exchange_explicit( std::shared_ptr<T>* p, std::shared_ptr<T> r, std::memory_order mo | (7) | (since C++11) |
template< class T > bool atomic_compare_exchange_weak( std::shared_ptr<T>* p, std::shared_ptr<T>* expected, std::shared_ptr<T> desired | (8) | (since C++11) |
template<class T> bool atomic_compare_exchange_strong( std::shared_ptr<T>* p, std::shared_ptr<T>* expected, std::shared_ptr<T> desired | (9) | (since C++11) |
template< class T > bool atomic_compare_exchange_strong_explicit( std::shared_ptr<T>* p, std::shared_ptr<T>* expected, std::shared_ptr<T> desired, std::memory_order success, std::memory_order failure | (10) | (since C++11) |
template< class T > bool atomic_compare_exchange_weak_explicit( std::shared_ptr<T>* p, std::shared_ptr<T>* expected, std::shared_ptr<T> desired, std::memory_order success, std::memory_order failure | (11) | (since C++11) |
如果多个执行线程访问相同的std::shared_ptr
对象,并且这些访问中的任何一个都使用非Const成员函数。shared_ptr
然后将发生数据竞争,除非通过这些函数执行所有此类访问,这些函数是相应的原子访问函数%28的重载。std::atomic_load
,,,std::atomic_store
,等.%29.
注意,共享的控制块[医]PTR是线程安全的:不同std::shared_ptr
对象可以使用可变操作(如Operator=或Reset)由多个线程同时访问,即使这些实例是副本,并且在内部共享相同的控制块。
1%29确定是否原子访问指向的共享指针。p
是无锁的。
2%29相当于atomic_load_explicit(p,
std::memory_order_seq_cst
)
3%29返回指向的共享指针p
.和非专业人士一样std::atomic_load_explicit
,,,mo
不可能std::memory_order_release
或std::memory_order_acq_rel
4%29相当于atomic_store_explicit(p, r, memory_order_seq_cst)
5%29存储共享指针r在指向p原子地,有效地执行p->swap(r).和非专业人士一样std::atomic_store_explicit,,,mo不可能std::memory_order_acquire或std::memory_order_acq_rel...
6%29相当于atomic_exchange_explicit(p, r, memory_order_seq_cst)
7%29存储共享指针r所指向的共享指针中p并返回以前指向的值p,原子化。有效执行p->swap(r)并返回r交换之后。
8%29相当于atomic_compare_exchange_weak_explicit(p, expected, desired,
std::memory_order_seq_cst
,
std::memory_order_seq_cst
)
9%29相当于atomic_compare_exchange_strong_explicit(p, expected, desired,
std::memory_order_seq_cst
,
std::memory_order_seq_cst
)
10%29比较所指向的共享指针p
和expected
如果它们相等于相同指针的28共享所有权,并且引用相同的指针%29,则分配desired
进*p
指定的内存排序约束。success
和回报true
.如果它们不相等,则分配*p
进*expected
指定的内存排序约束。failure
和回报false
...
11%29和10%29相同,但可能会伪造失败。
所有这些函数都在以下情况下调用未定义的行为:p
为空指针。
参数
p, expected | - | a pointer to a std::shared_ptr |
---|---|---|
r, desired | - | a std::shared_ptr |
mo, success, failure | - | memory ordering selectors of type std::memory_order |
例外
这些函数不会引发异常。
返回值
1%29true
如果原子访问是使用无锁指令实现的。
2,3%29指向共享指针的副本.
4,5%29%28无29
6,7%29以前指向共享指针的副本
8,9,10,11%29true
如果共享指针是等价的,并且执行了交换,false
否则。
注记
大并发TS提供原子智能指针类。atomic_shared_ptr
和atomic_weak_ptr
代替使用这些功能。
例
另见
atomic_is_lock_free (C++11) | checks if the atomic type's operations are lock-free (function template) |
---|---|
atomic_storeatomic_store_explicit (C++11)(C++11) | atomically replaces the value of the atomic object with a non-atomic argument (function template) |
atomic_loadatomic_load_explicit (C++11)(C++11) | atomically obtains the value stored in an atomic object (function template) |
atomic_exchangeatomic_exchange_explicit (C++11)(C++11) | atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic (function template) |
atomic_compare_exchange_weakatomic_compare_exchange_weak_explicitatomic_compare_exchange_strongatomic_compare_exchange_strong_explicit (C++11)(C++11)(C++11)(C++11) | atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not (function template) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。