atomic_is_lock_free
|
定义于头文件
<stdatomic.h>
|
||
|
_Bool atomic_is_lock_free
(
const
volatile
A
*
obj
)
;
|
(C11 起) | |
确定类型
A
(
obj
所指向对象的类型)的所有对象的原子操作是否无锁。在任何给定的程序执行中,对同一类型的所有指针调用
atomic_is_lock_free
的结果都是相同的。
这是一个为所有
A
类型
原子对象
定义的
泛型函数
。该参数是指向易变原子类型的指针,用于接受非易变和
易变
(如内存映射I/O)原子对象的地址。当对易变原子对象应用此操作时,将保留易变语义。
未指定泛型函数的名称是宏还是具有外部链接的标识符。若为访问实际函数而抑制宏定义(例如使用括号形式 ( 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 465 | C11 | 该函数为按对象实现 | 该函数为按类型实现 |
参考文献
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.17.5.1 atomic_is_lock_free 通用函数 (p: 205)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.17.5.1 atomic_is_lock_free 通用函数 (p: 280)
参阅
|
指示给定原子类型是否为无锁的
(宏常量) |
|
|
C++ 文档
关于
atomic_is_lock_free
|
|