优化并发写入缓冲区

时间:2010-10-05 15:17:49

标签: c++ multithreading

我需要有多个线程写入单个缓冲区(连续的内存块)。蛮力方法如下

  1. 想要写入缓冲区的线程将获取锁定缓冲区
  2. 整个缓冲区被锁定,因此只有获取锁定的线程才能修改缓冲区。
  3. 线程写入缓冲区。
  4. 线程解锁缓冲区。
  5. 此方法序列化所有线程,因为在给定时间只有一个线程处于活动状态。这应该是一个瓶颈,因为应用程序花费大部分时间写入缓冲区。

    有人可以建议一种在写入单缓冲区时增加并行性的方法吗?

    非常感谢提前。

3 个答案:

答案 0 :(得分:5)

让您的线程将其数据写入队列。然后,让专用线程从队列写入缓冲区。如果这不够并发,则牺牲固定顺序并使用多个队列。

答案 1 :(得分:1)

如果可能,您可以让线程以不同的大小写入缓冲区的不同位置,这样两个线程不会同时写入同一位置并相应地获取锁定。

答案 2 :(得分:0)

几天前,

Herb Sutter发表了一篇非常好的文章,几乎描述了这种情况。他讨论了使用active object来处理写入共享缓冲区的并发问题。您可以访问他的网站并点击链接或this link may work

来查看该文章