我需要多个线程写入单个缓冲区(连续的内存块)。该强制的方法将作为后续优化并行写入缓冲区
- 是要写入缓冲区将获得锁的缓冲
- 整个缓冲区被锁定,并且线程因此只有获得锁可以修改缓冲区的线程。
- 线程写入缓冲区。
- 线程解锁缓冲区。
此方法序列化所有线程,因为在给定时间只有一个线程处于活动状态。事实证明,这是应用程序花费大部分时间写入缓冲区的瓶颈。
有人可以请建议一种方法来增加并行性,同时写入单缓冲区?
非常感谢提前。
我需要多个线程写入单个缓冲区(连续的内存块)。该强制的方法将作为后续优化并行写入缓冲区
此方法序列化所有线程,因为在给定时间只有一个线程处于活动状态。事实证明,这是应用程序花费大部分时间写入缓冲区的瓶颈。
有人可以请建议一种方法来增加并行性,同时写入单缓冲区?
非常感谢提前。
如果可能,可以让线程写入不同大小的缓冲区的不同位置,以避免两个线程同时写入同一位置并相应地获取锁定。
Herb Sutter就在几天前发布了一篇很好的文章,描述了非常接近这种确切的情况。他讨论了使用active object
来处理写入共享缓冲区的并发问题。您可以访问他的网站并点击链接或this link may work查看文章。
也许你想要达到的更高的观点将有助于提出这个方案的替代解决方案。如果你有一个单独的缓冲区,它迟早会成为一个瓶颈,但可能会有其他选择(多个缓冲区,缓冲区的分区......) – 2010-10-05 18:42:28