当前位置: C语言 -- 标准库 -- <stdatomic.h> -- ATOMIC_POINTER_LOCK_FREE

ATOMIC_POINTER_LOCK_FREE宏


概要:
#include <stdatomic.h>
#define ATOMIC_POINTER_LOCK_FREE       value    //value值由实现定义。

描述:

该宏扩展为适合#if预处理指令的常量表达式,并表示指针原子类型的无锁属性。该宏值可能为0、1或者2,不同的宏值和原子类型的无锁属性对应关系如下表所示:

宏值 描述
0 表示该原子类型不是无锁的。
1 表示该原子类型有时是无锁的。
2 表示该原子类型是无锁的。

原子类型的实现可以是有锁的(lock-based),也可以是无锁的(lock-free)。标准原子类型会优先使用无锁实现,只有硬件不支持时才会退到有锁实现。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
/*宏ATOMIC_POINTER_LOCK_FREE范例*/

#ifdef __STDC_NO_ATOMICS__
#error "Implementation does not support atomic types."
#endif

#include <stdatomic.h>
#include <stdio.h>

int main(void)
{
  switch(ATOMIC_POINTER_LOCK_FREE)
  {
    case 0:
      puts("The atomic type is not lock-free.");
      break;
    case 1:
      puts("The atomic type is sometimes lock-free.");
      break;
    default:
      puts("The atomic type is lock-free.");
      break;
  }

    return 0;
}


输出:

The atomic type is lock-free.


相关内容:
ATOMIC_CHAR_LOCK_FREE 表示char原子类型无锁属性的宏。
ATOMIC_CHAR8_T_LOCK_FREE 表示char8_t原子类型无锁属性的宏。
ATOMIC_CHAR16_T_LOCK_FREE 表示char16_t原子类型无锁属性的宏。
ATOMIC_CHAR32_T_LOCK_FREE 表示char32_t原子类型无锁属性的宏。
ATOMIC_WCHAR_T_LOCK_FREE 表示wchar_t原子类型无锁属性的宏。
ATOMIC_SHORT_LOCK_FREE 表示short原子类型无锁属性的宏。
ATOMIC_INT_LOCK_FREE 表示int原子类型无锁属性的宏。
ATOMIC_LONG_LOCK_FREE 表示long原子类型无锁属性的宏。
ATOMIC_LLONG_LOCK_FREE 表示long long原子类型无锁属性的宏。
ATOMIC_BOOL_LOCK_FREE 表示bool原子类型无锁属性的宏。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018