首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无锁数据结构中的非POD类型

无锁数据结构中的非POD类型
EN

Stack Overflow用户
提问于 2015-12-01 06:50:21
回答 1查看 312关注 0票数 4

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

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

boost::lockfree::queue实现似乎是我所能找到的最适合生产的实时友好实现,它要求队列的模板类型是普通的可销毁/可构造的。

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

我的理解是,这是为了防止非锁自由/线程安全的构造函数/析构函数带来的副作用。如果数据类型主要是"POD",但非平凡的构造函数/析构函数也是“无锁”操作,例如静态成员变量上的原子比较和交换,该怎么办?如果这种数据类型被认为在无锁数据结构中使用是安全的,那么我是否应该使用自己的无锁队列,或者是否有可以用来代替Boost队列的同等稳定的实现?

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 06:46:18

您可以将指向对象的指针排入队列,而不是将对象的副本排入队列。指针是POD类型,可以简单地构造和析构。

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

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

https://stackoverflow.com/questions/34009485

复制
相关文章

相似问题

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