gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:14 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com