©
本文档使用
php.cn手册 发布
在头文件<stdatomic.h>中定义 | ||
---|---|---|
_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):
7.17.5.1 atomic_is_lock_free通用函数(p: 280)
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 ++文档