生产者和消费者优化

时间:2017-08-09 20:19:47

标签: c++ multithreading qt optimization semaphore

我正在Qt中编写一个具有OnReceive(int value)事件的C ++程序。它将整数值捕获并推送到std :: vector中。在另一个工作线程上,我可以访问这个向量,我可以设置一个信号量来等待20个值然后我可以处理它们。

我想做一些优化。

我的问题是如何将我的缓冲区或矢量分成0-4,5-10,11-19的3个部分,例如,只要矢量中有5个值可用(例如0到4),第二个工作程序开始处理它们,而第一个线程仍然继续获取剩余的值?

通过这种方式我希望我的线程之间有重叠。所以他们不需要连续运行。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用无等待的环形缓冲区。

提升声称拥有one

请注意,它位于lock free文件夹中,但所有方法都声称是线程安全且无需等待。