C++:如果 std::atomic_flag 是唯一的无锁原子类型,如何在C++中实现无锁数据结构?
C++: How can lock-free data structures be implemented in C++ if std::atomic_flag is the only lock-free atomic type?
实现无锁数据结构的典型方法是使用原子CAS操作,例如std::compare_exchange_strong
或std::compare_exchange_weak
。这种技术的用法可以在Antony Williams的"C++ Concurrency in Action"中看到,其中实现了无锁堆栈。堆栈作为带有std::atomic<node*>
头指针的链表实现。CAS 操作在推送和弹出期间在此指针上执行。但是C++标准保证只有std::atomic_flag
是无锁的,其他原子类型,包括std::atomic<T*>
,可能不是无锁的。
1( 我是否正确理解,如果std::atomic<T*>
不是无锁的(std::atomic::is_lock_free()
返回 false(,那么基于 CAS 对std::atomic<T*>
操作的数据结构不是无锁的?
2(如果是,那么,如果std::atomic_flag
是某些编译器的唯一无锁原子类型,那么在C++上实现无锁数据结构的替代方法是什么?
编译器没有原子类型的无锁实现的唯一可能原因是处理器没有原子操作。我不知道现代处理器是这种情况。
如果处理器不支持原子操作,您可能别无选择,只能使用互斥体、信号量或类似的同步原语
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 带参数的数据结构的全局声明