以下两个代码段是否相同:
std::atomic_flag lock = ATOMIC_FLAG_INIT;
和
std::atomic_flag lock;
lock.clear();
似乎第二个可以允许锁定处于未知状态,只需点击几下
第一个代码段是否总是具有已知状态?
答案 0 :(得分:9)
ATOMIC_FLAG_INIT
是一个实现定义的宏,可以保证在你发布的表达式中工作。例如,它可以用于初始化您在命名空间范围内定义的atomic_flag
。它还保证标志将被清除,如果标志本身具有静态存储持续时间,则初始化也将是静态的。
第二组语句是初始化,然后是清除标志。由于atomic_flag
的状态在默认构造后未指定,因此它确实意味着该标志处于未指定状态,直到clear()
被执行。
答案 1 :(得分:5)
宏
ATOMIC_FLAG_INIT
的定义方式可以用于将atomic_flag
类型的对象初始化为清除状态。对于静态持续时间对象,该初始化应该是静态的。未指定是否未初始化atomic_flag
object的初始状态为set或clear。