线程读取与写入锁定

时间:2012-08-31 02:18:28

标签: c++ multithreading locking

我正在用C ++编写一个CPU密集型程序,它有几个线程需要访问共享数据结构,所以需要锁定。为了最大化吞吐量,我希望将瓶颈保持在最低限度。看起来可能只有9次,只需要读取数据结构,十次中有一次需要修改它。

有没有办法让线程获取读或写锁,这样写锁会阻塞所有内容,但读锁不会相互阻塞?

便携式解决方案将是理想的,但如果有一个适用于Windows的解决方案和另一个适用于Linux的解决方案,那就没问题。

1 个答案:

答案 0 :(得分:4)

是的,这是一个常见的情况,可以使用reader-writer lock来解决。

请注意,根据程序的动态属性,您可能需要注意 writer fortvation 。如果有足够的读者,他们的阅读尝试总是重叠(或重叠很长一段时间),那么读写器锁的简单实现将使编写者“等待”,直到有 no <读者阅读。在更高级的实现中,写入器请求将在后续读取器之前被概念性地插入到队列中,从而允许写入器在所有先前活动的读取器完成之后有机会访问。

大多数实现要求您提前知道是否需要读锁写锁定。某些实现允许您将读锁定“升级”为写锁定,而不必首先释放读锁定(这将使另一个编写者有机会进入锁定。)