我们一直希望在代码中使用无锁队列来减少当前实现中单个生产者和使用者之间的锁争用.那里有很多队列实现,但我还不太清楚如何最好地管理节点的内存管理.
例如,生产者看起来像这样:
queue.Add( new WorkUnit(...) );
Run Code Online (Sandbox Code Playgroud)
消费者看起来像:
WorkUnit* unit = queue.RemoveFront();
unit->Execute();
delete unit;
Run Code Online (Sandbox Code Playgroud)
我们目前使用内存池进行分配.您会注意到生产者分配内存并且消费者删除它.由于我们正在使用池,因此我们需要向内存池添加另一个锁以正确保护它.这似乎首先否定了无锁队列的性能优势.
到目前为止,我认为我们的选择是:
还有其他我们可以探索的选择吗?我们试图避免实现无锁内存池,但我们可能采取这种方式.
谢谢.