首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:如果C++是唯一的无锁原子类型,那么如何在std::atomic_flag中实现无锁数据结构呢?

C++:如果C++是唯一的无锁原子类型,那么如何在std::atomic_flag中实现无锁数据结构呢?
EN

Stack Overflow用户
提问于 2018-06-13 04:13:01
回答 1查看 301关注 0票数 3

实现无锁数据结构的典型方法是使用原子CAS操作,如std::compare_exchange_strongstd::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),那么std::atomic<T*>上基于CAS操作的数据结构就不是无锁的?

2)如果是,那么,如果C++是某些编译器唯一的无锁原子类型,那么在std::atomic_flag上实现无锁数据结构的替代方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 04:17:53

编译器没有原子类型的无锁实现的唯一可能原因是处理器没有原子操作。我不知道有哪种现代处理器会出现这种情况。

如果处理器不支持原子操作,您可能别无选择,只能使用互斥锁、信号量或类似的同步原语

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50825174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档