我在一个交界处,我试图在基于互斥锁的数据结构和无锁(可能还有等待)的数据结构之间选择一个。
在深入研究时,我没有听说过C++ 11标准是否支持原子类型的无锁操作,甚至不支持atomic_uint32_t
之类的基于宽度的积分。换句话说,不仅仅是而不是授予了接口(interface)是无锁的;这不仅仅是std::atomic<>
接口(interface)。在整个标准库中唯一看起来没有锁的东西是std::atomic_flag
。
这是真的还是我缺少什么吗?是什么原因呢?我的意思是,标准将“原子”称为根本不是无锁的事物,甚至允许使用互斥体或在幕后阻止调用。
最佳答案
C++标准不保证std::atomic<T>
操作是无锁的。但是,您可以使用std::atomic<T>::is_lock_free()
来确定std::atomic<T>
的操作是否为无锁29.6.5 [atomics.types.operations.req]第7段:
如果不是非锁定的,它仍然会执行所需的同步,但是会使用一些锁定来进行同步。
关于c++ - C++ 11标准是否保证std::atomic <>被实现为无锁操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19900524/