为什么atomic_flag默认构造函数未指定状态?

时间:2016-02-22 10:14:26

标签: c++ constructor atomic

使用std::atomic_flag时,必须要小心,始终使用ATOMIC_FLAG_INIT明确初始化它,这很容易出错。但是有一个默认的构造函数......那么,是否有一个客观原因让默认构造函数将标志保留在非特定状态?

2 个答案:

答案 0 :(得分:1)

This link(由dyp在评论中发布)描述了这个决定是因为在某些体系结构上,零初始化atomic_flag将对应于设置状态,并且在某些体系结构上将对应于清除状态。因此,定义了未使用atomic_flag显式初始化的ATOMIC_FLAG_INIT最初处于不确定状态。

答案 1 :(得分:0)

this answer

已经回答了这个问题

我遇到了一个问题,该映射包含一个包含std::atomic_flag的元组的图-显式的初始化很容易添加很多复杂的代码。

一种解决方法解决方案是将其包装为另一种类型,例如:

struct atomic_flag_ : public std::atomic_flag {

    atomic_flag_() : std::atomic_flag{ ATOMIC_FLAG_INIT } {
    }

};

或无继承:

struct atomic_flag_ {

    std::atomic_flag flag{ ATOMIC_FLAG_INIT };

};

现在,您不必担心初始化问题(除非在某些特殊情况下,例如static init 惨败)。