我想为非POD数据类型编写无锁代码;也就是说,非平凡的可销毁类和非平凡的可构造类。
例如,我需要从非POD类型的多生产者、多消费者无锁队列中推入/弹出。
boost::lockfree::queue实现似乎是我所能找到的最适合生产的实时友好实现,它要求队列的模板类型是普通的可销毁/可构造的。
我可以重构我的团队的10,000行代码库,以便在我关心的每个类中将状态与副作用分开,然后使用新POD状态的Boost无锁队列与原始类型等效。但是,在我这样做之前:有没有不同的策略可以用来为这些非POD类型编写无锁代码?
我的理解是,这是为了防止非锁自由/线程安全的构造函数/析构函数带来的副作用。如果数据类型主要是"POD",但非平凡的构造函数/析构函数也是“无锁”操作,例如静态成员变量上的原子比较和交换,该怎么办?如果这种数据类型被认为在无锁数据结构中使用是安全的,那么我是否应该使用自己的无锁队列,或者是否有可以用来代替Boost队列的同等稳定的实现?
发布于 2015-12-22 06:46:18
您可以将指向对象的指针排入队列,而不是将对象的副本排入队列。指针是POD类型,可以简单地构造和析构。
当然,您需要管理实际对象的构造和销毁,但这些通常是不存在并发问题的本地操作。
https://stackoverflow.com/questions/34009485
复制相似问题