使用std::atomic_flag
时,必须要小心,始终使用ATOMIC_FLAG_INIT
明确初始化它,这很容易出错。但是有一个默认的构造函数......那么,是否有一个客观原因让默认构造函数将标志保留在非特定状态?
答案 0 :(得分:1)
This link(由dyp在评论中发布)描述了这个决定是因为在某些体系结构上,零初始化atomic_flag
将对应于设置状态,并且在某些体系结构上将对应于清除状态。因此,定义了未使用atomic_flag
显式初始化的ATOMIC_FLAG_INIT
最初处于不确定状态。
答案 1 :(得分:0)
我遇到了一个问题,该映射包含一个包含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 惨败)。