std::atomic::is_lock_free
STD::原子::is[医]锁[医]免费
| | (since C++11) |
---|---|---|
bool is_lock_free() const; | | |
bool is_lock_free() const volatile; | | |
检查这种类型的所有对象的原子操作是否是无锁的。
参数
%280%29
返回值
true
如果这种类型的对象的原子操作是无锁的,false
否则。
注记
所有原子类型,除std::atomic_flag
可以使用互斥或其他锁定操作来实现,而不是使用无锁的原子CPU指令。原子类型也被允许为有时
无锁的,例如,如果在给定的体系结构中,只有对齐内存访问自然是原子的,则相同类型的对齐对象必须使用锁。
C++标准建议%28,但不要求%29,即无锁原子操作也是无地址的,也就是说,适合于使用共享内存的进程之间的通信。
例外
noexcept
规格:
noexcept
例
二次
#include <iostream>
#include <utility>
#include <atomic>
struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic<A>{}.is_lock_free() << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic<B>{}.is_lock_free() << '\n';
}
二次
可能的产出:
二次
std::atomic<A> is lock free? false
std::atomic<B> is lock free? true
二次
另见
atomic_is_lock_free (C++11) | checks if the atomic type's operations are lock-free (function template) |
---|---|
is_always_lock_free static | indicates that the type is always lock-free (public static member constant) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。