实现无锁数据结构的典型方法是使用原子CAS操作,如std::compare_exchange_strong或std::compare_exchange_weak。这项技术的用法示例可以在Antony Williams的"C++ Concurrency in Action“中看到,其中实现了一个无锁堆栈。但是C++标准保证只有std::atomic_flag是无锁的,其他原子类型,包括std::atomic<T*>,可能不是无锁的。
我过去常常看到“无锁数据结构”这个术语,并认为“那一定很复杂”。然而,我一直在读"C++ Concurrency in Action“,它似乎编写了一个无锁的数据结构,您所要做的就是停止使用互斥/锁,并将其替换为原子代码(以及可能的内存排序障碍)。编写无锁的数据结构仅仅是用原子操作替换锁的一种情况吗?