Namespaces
Variants

ATOMIC_FLAG_INIT

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
ATOMIC_FLAG_INIT
(C++11)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
定义于头文件 <atomic>
#define ATOMIC_FLAG_INIT /* 由实现定义 */
(C++11 起)

定义可用于将 std::atomic_flag 初始化为清除(false)状态的初始化器,形式为 std:: atomic_flag v = ATOMIC_FLAG_INIT ; 。未指明该初始化器是否可用于其他初始化上下文。

如果该标志是具有 静态存储期 完整对象 ,则此 初始化是静态的

这是将 std::atomic_flag 初始化为确定值的唯一方式:任何其他初始化后所持有的值都是未指定的。

(C++20 前)

由于 std::atomic_flag 的默认构造函数会将其初始化为清除状态,此宏不再需要。保留该宏是为了与 C 语言保持兼容。

(C++20 起)

示例

#include <atomic>
std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // 静态初始化,
// 保证在静态对象的动态初始化期间可用
int main()
{
    std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // 保证有效
//    std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // 未指定行为
}

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

缺陷报告 适用版本 发布时行为 正确行为
LWG 2159 C++11 未明确说明 ATOMIC_FLAG_INIT
是否可用于其他初始化场景
不保证其他
使用方式
LWG 3659 C++20 ATOMIC_FLAG_INIT 已被弃用,但在某些平台的 C 语言中仍需使用 取消弃用

参见

无锁布尔原子类型
(类)
C 文档 关于 ATOMIC_FLAG_INIT