为什么atomic_flag.clear()有一个次优的默认memory_order参数

Why does atomic_flag.clear() have a sub-optimal default memory_order argument?

本文关键字:默认 order 参数 memory 有一个 flag atomic clear 为什么      更新时间:2023-10-16

std::atomic_flag与这些默认的std::memory_order有两个功能:

void clear(std::memory_order order = std::memory_order_seq_cst);
bool test_and_set(std::memory_order order = std::memory_order_seq_cst);
也许我错了,但不应该clear 总是memory_order_releasetest_and_set 总是memory_order_acquire ?也许我误解了它们的作用

c++11中所有原子操作的默认内存顺序是顺序一致性(std::memory_order_seq_cst)。如果你愿意,你可以指定一个更宽松的内存顺序,尽管这通常更复杂。

std::atomic_flag保证是无锁的,可以用来构建其他同步方法。而std::atomic<T>类型可以用锁实现,如果编译器/库编写者选择这样做,并且仍然符合规范。这就是std::atomic_flag存在这些默认值的原因。根据你想做的事情,指定一个不同的内存顺序可能是有意义的,但默认设置为保守正确的顺序一致性。