atomic_is_lock_free

atomic_is_lock_free

在头文件中定义
_Bool atomic_is_lock_free(const volatile A * obj);(自C11以来)

确定类型的所有对象A(被指向的对象的类型)的原子操作是否obj都是无锁的。在任何给定的程序执行中,调用的结果atomic_is_lock_free对于相同类型的所有指针是相同的。

这是为所有原子对象类型定义的通用函数A。该参数是指向易失性原子类型的指针,以接受非易失性和易失性(例如内存映射I/O)原子变量的地址。

参数

obj-指向要检查的原子对象的指针

返回值

true如果对类型的所有对象的操作A都是无锁的,否则false

注意

正如已发布的C11所指出的那样,该函数是按对象而不是按类型的。这由DR 465纠正。

示例

#include <stdio.h> #include <stdatomic.h> _Atomic struct A { int a[100]; } a; _Atomic struct B { int x, y; } b; int main(void) { printf("_Atomic struct A is lock free? %s\n", atomic_is_lock_free(&a) ? "true" : "false" printf("_Atomic struct B is lock free? %s\n", atomic_is_lock_free(&b) ? "true" : "false" }

可能的输出:

_Atomic struct A is lock free? false _Atomic struct B is lock free? true

参考

  • C11标准(ISO/IEC 9899:2011):

另请参阅

ATOMIC_BOOL_LOCK_FREEATOMIC_CHAR_LOCK_FREEATOMIC_CHAR16_T_LOCK_FREEATOMIC_CHAR32_T_LOCK_FREEATOMIC_WCHAR_T_LOCK_FREEATOMIC_SHORT_LOCK_FREEATOMIC_INT_LOCK_FREEATOMIC_LONG_LOCK_FREEATOMIC_LLONG_LOCK_FREEATOMIC_POINTER_LOCK_FREE (C11)indicates that the given atomic type is lock-free (macro constant)

| 针对atomic_is_lock_free |的C ++文档