gpt4 book ai didi

c++ - 线程读取与写入锁定

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:41 25 4
gpt4 key购买 nike

我正在用 C++ 编写一个 CPU 密集型程序,它有多个线程需要访问共享数据结构,因此需要锁定。为了最大化吞吐量,我想将瓶颈保持在最低限度。看起来十分之九可能只需要读取数据结构,而十分之一可能需要修改它。

有没有办法让线程获取读锁或写锁,以便写锁阻塞一切但读锁不会互相阻塞?

可移植解决方案是理想的,但如果有一种适用于 Windows 的解决方案和另一种适用于 Linux 的解决方案,那就没问题了。

最佳答案

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

请注意,根据程序的动态属性,您可能需要注意writer starvation。如果有足够多的读者,他们的读取尝试总是重叠(或重叠很长时间),那么一个简单的读写锁实现将使作者“挨饿”,让作者等待直到没有 读者阅读。在更高级的实现中,写入者请求将在概念上先于后续读取者插入队列,允许写入者有机会在所有先前活跃的读取者完成后访问。

大多数实现要求您提前知道您是想要读锁还是写锁。一些实现允许您将读锁“升级”为写锁,而无需先释放读锁(这会给另一个写入者进入锁的机会)。

关于c++ - 线程读取与写入锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com