首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::atomic_...<std::shared_ptr>

template< class T > bool atomic_is_lock_free( const std::shared_ptr<T>* p );

(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_releasestd::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_acquirestd::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比较所指向的共享指针pexpected如果它们相等于相同指针的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_ptratomic_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)

代码语言:txt
复制
 ? cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com