在线文档教程
C++

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 staticindicates that the type is always lock-free (public static member constant)

© cppreference.com

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

http://en.cpPreference.com/w/cpp/原子/is[医]锁[医]免费