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 ++文档