命名空间
变体
操作

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 - 指向要检查的原子对象的指针

[编辑] 返回值

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