【发布时间】:2010-02-03 06:21:46
【问题描述】:
我对 *nix 系统上的 POSIX Pthreads 中的读写锁有一些疑问,例如 Linux。
我想知道读写锁的默认偏差是什么,即它更喜欢读而不是写,反之亦然?它是否提供了一些 api 来更改此默认行为。
posix pthread 是否提供了一些 api 以便我们可以更改 pthread_rwlock_t 以防止写入器饥饿?根据我的阅读(如果我错了,请纠正我),默认实现偏向于读取器线程,因此写入器线程可能面临饥饿。
我已经阅读了 David Butenhof 的 Programming with Posix threads 一书中的 rw lock 示例实现。
我想知道 posix pthreads 如何处理编写器线程的饥饿?是否有一些 api 可以用来设置读写锁的属性,以防止写饥饿(我从未听说过)?还是用户必须处理这个问题?
如果您认为答案是由实现定义的,那么请举例说明它是如何在 Linux 中完成的,因为这就是我要寻找的。strong>
请注意,我只需要 *nix 系统的解决方案。不要认为我很粗鲁,但是发布一些特定于 windows 的代码对我来说毫无用处。
感谢大家的帮助和耐心:)
【问题讨论】:
-
使用互斥锁代替 rwlock 可以避免这个问题。如果争用较低,则在某些实现中也更快(例如从互斥锁和条件变量构造 rwlock 的实现)。
标签: linux multithreading pthreads