std::atomic_is_lock_free
STD::原子[医]是[医]锁[医]自由的,原子的[医]某某[医]锁[医]免费
Defined in header | | |
---|---|---|
| (1) | (since C++11) |
template< class T > bool atomic_is_lock_free( const volatile std::atomic<T>* obj | | |
template< class T > bool atomic_is_lock_free( const std::atomic<T>* obj | | |
#define ATOMIC_BOOL_LOCK_FREE /* unspecified */ #define ATOMIC_CHAR_LOCK_FREE /* unspecified */ #define ATOMIC_CHAR16_T_LOCK_FREE /* unspecified */ #define ATOMIC_CHAR32_T_LOCK_FREE /* unspecified */ #define ATOMIC_WCHAR_T_LOCK_FREE /* unspecified */ #define ATOMIC_SHORT_LOCK_FREE /* unspecified */ #define ATOMIC_INT_LOCK_FREE /* unspecified */ #define ATOMIC_LONG_LOCK_FREE /* unspecified */ #define ATOMIC_LLONG_LOCK_FREE /* unspecified */ #define ATOMIC_POINTER_LOCK_FREE /* unspecified */ | (2) | (since C++11) |
1%29确定所指向的原子对象是否由obj是实现无锁的,就像通过调用obj->is_lock_free()在任何给定的程序执行中,对于同一类型的所有指针,无锁查询的结果都是相同的。
2%29扩展到具有值的整数常量表达式。
0
对于从不无锁的内置原子类型。
1
对于内置的原子类型,有时
无锁
2
对于始终没有锁定的内置原子类型。
参数
obj | - | pointer to the atomic object to examine |
---|
返回值
true
如果*obj
是一个无锁原子,false
否则。
例外
noexcept
规格:
noexcept
注记
所有原子类型,除std::atomic_flag
可以使用互斥或其他锁定操作来实现,而不是使用无锁的原子CPU指令。原子类型也被允许为有时
无锁的,例如,如果在给定的体系结构中,只有对齐内存访问自然是原子的,则相同类型的对齐对象必须使用锁。
C++标准建议%28,但不要求%29,即无锁原子操作也是无地址的,也就是说,适合于使用共享内存的进程之间的通信。
例
二次
#include <iostream>
#include <utility>
#include <atomic>
struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::atomic<A> a;
std::atomic<B> b;
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic_is_lock_free(&a) << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic_is_lock_free(&b) << '\n';
}
二次
可能的产出:
二次
std::atomic<A> is lock free? false
std::atomic<B> is lock free? true
二次
另见
is_lock_free | checks if the atomic object is lock-free (public member function of std::atomic) |
---|---|
std::atomic_is_lock_free(std::shared_ptr) | specializes atomic operations for std::shared_ptr (function template) |
atomic_flag (C++11) | the lock-free boolean atomic type (class) |
is_always_lock_free static | indicates that the type is always lock-free (public static member constant of std::atomic) |
C原子文档[医]是[医]锁[医]免费
C原子文档[医]%2A[医]锁[医]免费
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。