gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:02:14 24 4
gpt4 key购买 nike

std::atomic_flag 有 2 个具有这些默认 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存在这些默认值。根据您尝试执行的操作,指定不同的内存顺序可能有意义,但默认设置会保守地正确设置并保持顺序一致性。

关于c++ - 为什么 atomic_flag.clear() 有一个次优的默认 memory_order 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com