std::atomic_flag
有2个函数,默认std::memory_order
s:
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_release
而test_and_set
总是 {{1 }}?也许我误解了这些做法。
答案 0 :(得分:4)
默认的内存顺序是c ++ 11中所有原子操作的顺序一致性(std::memory_order_seq_cst
)。如果需要,您可以指定更宽松的内存顺序,尽管这通常更复杂。
std::atomic_flag
保证无锁,可用于构建其他同步方法。如果编译器/库编写器选择并仍然符合规范,则可以使用锁实现std::atomic<T>
类型。所以这就是std::atomic_flag
存在这些默认值的原因。根据您要执行的操作,指定不同的内存顺序可能有意义,但默认设置为保守正确且顺序一致。