【发布时间】:2015-07-27 04:46:55
【问题描述】:
来自 C++ Concurrency in Action:
std::atomic 和 std::atomic_flag 的区别在于 std::atomic 可能不是无锁的;实现可能必须在内部获取互斥锁以确保操作的原子性
我想知道为什么。如果 atomic_flag 保证是无锁的,为什么不保证 atomic<bool> 也是如此?
这是因为成员函数compare_exchange_weak吗?我知道有些机器缺少一条比较和交换指令,是这个原因吗?
【问题讨论】:
-
因为
std::atomic<T>有一个类型参数,所以 std::atomic_flag 没有。 T 更新是否是原子的取决于处理器架构。库编写者可以为 atomic_flag 选择任何合适的类型。 -
好的。但是我的问题是关于
std::atomic<bool>和std::atomic_flag之间的本质区别 -
我觉得没什么区别
标签: c++ multithreading atomic lock-free stdatomic