c++ - 无锁数据结构中的非 POD 类型

标签 c++ multithreading boost lock-free

我想为非POD数据类型写无锁代码;也就是说,非平凡可破坏和非平凡可构造的类。

例如,我需要向非 POD 类型的多生产者、多消费者无锁队列推送/弹出。

boost::lockfree::queue 实现,这似乎是我能找到的最适合生产的实时友好实现,它要求队列的模板类型是微不足道的可破坏/可构造的。

我可以重构我团队的 10,000 行代码库,以将状态与我关注的每个类中的副作用分开,然后使用与原始类型等效的新 POD 状态的 Boost 无锁队列。但是,在我这样做之前:我可以使用不同的策略为这些非 POD 类型编写无锁代码吗?

我的理解是,这是为了防止非无锁/线程安全的构造函数/析构函数的副作用。如果数据类型主要是“POD”,但非平凡的构造函数/析构函数也是“无锁”操作,例如原子比较和交换静态成员变量?如果这种数据类型被认为可以安全地用于无锁数据结构,我应该推出自己的无锁队列,还是有一个等效的稳定实现可以代替 Boost 队列?

最佳答案

您可以将指向对象的指针而不是对象的拷贝放入队列。指针是 POD 类型,可以简单地构造和销毁。

当然,您随后需要管理实际对象的构造和销毁,但这些通常是本地操作,不会遇到并发问题。

关于c++ - 无锁数据结构中的非 POD 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009485/

相关文章:

c++ - qInstallMessageHandler 不接受公共(public)方法作为参数

c++ - VxWorks with Eclipse - 缺少头文件

Python 线程未启动

c++ - 使用logging::init_from_stream boost 日志格式单个属性

c++ - boost 软件集成

c++ - 关于标准中虚函数描述的一个问题

c++ - 在多级继承的情况下无法理解虚拟基类构造函数

c++ - 内存排序问题

python - 绘图时多重处理不起作用

c++ - 当包含 boost/beast/http.hpp 时,CMake 出现多个错误