【发布时间】:2012-10-25 19:54:47
【问题描述】:
我们已经实现了一个读写锁
typedef boost::unique_lock<boost::shared_mutex> WriterLock;
typedef boost::shared_lock<boost::shared_mutex> ReadersLock;
我们有许多多线程阅读器,而编写器只有几个。 读取器与其他读取器共享访问权限,但阻止写入器。 Writer 阻塞,直到它拥有对资源的独占访问权。
我们在 boost 文档中找不到这个...
防止 Writer 饿死的政策是什么?
例如,如果有很多读者都从线程池中敲锁,那么在写者最终获得锁之前,是否有任何尝试锁定次数的保证上限?
我们看到的性能数据似乎表明写入必须等到完全没有读取器,并且在极少数情况下需要很长时间,因为新读取器可以在为当前读取器提供服务时请求锁定。在这种情况下,在我们的代码中,作者似乎必须等待很长时间,直到根本没有读取。
我们更喜欢类似队列的系统,当写入者请求锁定时,所有当前读取者都会耗尽,但所有新进入的读取者都会在写入者请求之后阻塞。
Boost 中可升级锁概念的行为是什么? Boost threads
它并没有说明它如何处理作家饥饿。
【问题讨论】:
-
stackoverflow.com/a/9385208/98654 声明
boost::shared_mutex的“公平性”是特定于实现的,但没有该声明的来源。 -
您是否试图让作者优先于读者?
-
PriorNycz - 不是所有线程都具有相同的优先级。读者很快,但可能有很多读者。只有少数作家。因此,如果作者被阻止,如果根本没有等待读者,可能需要很长时间。
-
另一个有趣的话题。 stackoverflow.com/questions/989795/…
标签: c++ multithreading boost