命名空间
变体
操作

atomic_is_lock_free

来自 cppreference.cn
< c‎ | atomic
在头文件 <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