加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:14:35 所属栏目:百科 来源:网络整理
导读:我想为非POD数据类型编写无锁代码;也就是说,非平凡的可破坏的和非平凡的可构建的类. 例如,我需要从非生产者,多消费者无锁定的非POD类型队列推送/弹出. boost :: lockfree :: queue实现似乎是我能找到的最具生产性的实时友好实现,它要求队列的模板类型可以简
我想为非POD数据类型编写无锁代码;也就是说,非平凡的可破坏的和非平凡的可构建的类.

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

boost :: lockfree :: queue实现似乎是我能找到的最具生产性的实时友好实现,它要求队列的模板类型可以简单地破坏/构造.

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

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

解决方法

您可以将指针排队到对象而不是对象的副本.指针是POD类型,可以简单地构造和破坏.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读