非常教程

C参考手册

原子操作 | Atomic operations

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)原子变量的地址。

参数

obj

-

指向要检查的原子对象的指针

返回值

true如果对类型的所有对象的操作A都是无锁的,否则false

注意

正如已发布的C11所指出的那样,该函数是按对象而不是按类型的。这由DR 465纠正。

示例

#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

参考

  • C11标准(ISO/IEC 9899:2011):
    • 7.17.5.1 atomic_is_lock_free通用函数(p: 280)

另请参阅

ATOMIC_BOOL_LOCK_FREEATOMIC_CHAR_LOCK_FREEATOMIC_CHAR16_T_LOCK_FREEATOMIC_CHAR32_T_LOCK_FREEATOMIC_WCHAR_T_LOCK_FREEATOMIC_SHORT_LOCK_FREEATOMIC_INT_LOCK_FREEATOMIC_LONG_LOCK_FREEATOMIC_LLONG_LOCK_FREEATOMIC_POINTER_LOCK_FREE (C11)

indicates that the given atomic type is lock-free (macro constant)

| 针对atomic_is_lock_free |的C ++文档

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。