有以下两个代码段是相同的:就是使用ATOMIC_FLAG_INIT和std :: atomic_flag ::明确的区别
std::atomic_flag lock = ATOMIC_FLAG_INIT;
和
std::atomic_flag lock;
lock.clear();
这似乎是第二个可以允许锁定处于未知状态,点击几下
第一个代码段总是会有一个已知状态?
有以下两个代码段是相同的:就是使用ATOMIC_FLAG_INIT和std :: atomic_flag ::明确的区别
std::atomic_flag lock = ATOMIC_FLAG_INIT;
和
std::atomic_flag lock;
lock.clear();
这似乎是第二个可以允许锁定处于未知状态,点击几下
第一个代码段总是会有一个已知状态?
ATOMIC_FLAG_INIT
是一个实现定义的宏,保证在您发布的表达式中工作。例如,它可以方便地初始化您在名称空间范围内定义的atomic_flag
。它还保证标志将被清除,并且如果标志本身具有静态存储持续时间,则初始化也将是静态的。
第二组语句是初始化,然后清除标志。由于atomic_flag
的状态是未指定的后默认构造,它意味着该标志处于未指定状态,直到执行clear()
。
宏
ATOMIC_FLAG_INIT
应以这样一种方式,它可用于atomic_flag
类型的对象初始化到透明状态来定义。对于静态持续时间的对象,该初始化应该是静态的。没有说明未初始化的对象是否具有初始状态设置或清除。