atomic_is_lock_free
来自 cppreference.cn
定义于头文件 <stdatomic.h> |
||
_Bool atomic_is_lock_free( const volatile A* obj ); |
(自 C11 起) | |
确定类型 A
(由 obj
指向的对象的类型)的所有对象的原子操作是否为无锁的。在任何给定的程序执行中,对于相同类型的所有指针,调用 atomic_is_lock_free
的结果是相同的。
这是一个为所有原子对象类型 A
定义的泛型函数。参数是指向 volatile 原子类型的指针,以接受非 volatile 和 volatile(例如,内存映射 I/O)原子对象的地址,并且当将此操作应用于 volatile 原子对象时,volatile 语义会被保留。
泛型函数的名称是宏还是声明为具有外部链接的标识符,这是未指定的。如果为了访问实际函数而抑制了宏定义(例如,像 (atomic_is_lock_free)(...) 这样加括号),或者程序定义了一个与泛型函数名称相同的外部标识符,则行为是未定义的。
目录 |
[编辑] 参数
obj | - | 指向要检查的原子对象的指针 |
[编辑] 返回值
true 如果类型 A
的所有对象上的操作是无锁的,则为 false,否则为否。
[编辑] 示例
运行此代码
#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
[编辑] 缺陷报告
以下行为变更缺陷报告已追溯应用于先前发布的 C 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
DR 465 | C11 | 此函数是按对象 | 此函数是按类型 |
[编辑] 参考文献
- C17 标准 (ISO/IEC 9899:2018)
- 7.17.5.1 atomic_is_lock_free 泛型函数(页码:205)
- C11 标准 (ISO/IEC 9899:2011)
- 7.17.5.1 atomic_is_lock_free 泛型函数(页码:280)
[编辑] 参见
表示给定的原子类型是无锁的 (宏常量) | |
C++ 文档 关于 atomic_is_lock_free
|