命名空间
变体
操作

atomic_is_lock_free

来自 cppreference.com
< c‎ | atomic
定义在头文件 <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 - 指向要检查的原子对象的指针

[编辑] 返回值

如果对 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 应用于 发布的行为 正确行为
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++ 文档 for atomic_is_lock_free