命名空间
变体
操作

ATOMIC_FLAG_INIT

来自 cppreference.cn
< cpp‎ | atomic
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协作式取消
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩锁和屏障
(C++20)
(C++20)
期物
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危害指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(在 C++20 中弃用)
(C++11)(在 C++20 中弃用)
ATOMIC_FLAG_INIT
(C++11)
内存顺序
(C++11)(在 C++26 中弃用)
原子操作的自由函数
原子标志的自由函数
 
定义于头文件 <atomic>
#define ATOMIC_FLAG_INIT /* implementation-defined */
(自 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; // static initialization,
// guaranteed to be available during dynamic initialization of static objects.
 
int main()
{
    std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // guaranteed to work
//    std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified
}

[编辑] 缺陷报告

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

DR 应用于 已发布行为 正确行为
LWG 2159 C++11 不清楚 ATOMIC_FLAG_INIT 是否
可以用于其他初始化语境
其他用法
不保证
LWG 3659 C++20 ATOMIC_FLAG_INIT 已弃用,但在某些平台上的 C 中需要 它被取消弃用

[编辑] 参见

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