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 | - | 指向要检查的原子对象的指针 |
[编辑部分:返回值] 返回值
如果类型 A
的所有对象上的操作都是无锁的,则为 true,否则为 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 465 | C11 | 此函数是按对象进行的 | 此函数是按类型进行的 |
[编辑部分:参考资料] 参考资料
- C17 标准 (ISO/IEC 9899:2018)
- 7.17.5.1 The atomic_is_lock_free generic function (p: 205)
- C11 标准 (ISO/IEC 9899:2011)
- 7.17.5.1 The atomic_is_lock_free generic function (p: 280)
[编辑部分:另请参阅] 另请参阅
指示给定的原子类型是否是无锁的 (宏常量) | |
C++ 文档 for atomic_is_lock_free
|