我是靠谱客的博主 美满豆芽,最近开发中收集的这篇文章主要介绍linux读写锁 饥饿,linux – 如何防止在pthreads读写锁中的作者饥饿,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这确实取决于实现 – 所以既然您已经具体询问了Linux,我的意见是指现有glibc中使用的pthread的当前NPTL实现。

这里有两个相关但单独的问题。首先,有这样的情况:

目前有读锁,而作家等等。一个新线程尝试读取锁定。

这里的默认操作是允许读者继续 – 有效地“跳过队列”超过作者。但是,您可以覆盖此。如果您使用pthread_rwlockattr_setkind_np()函数在传递给pthread_rwlock_init()的attr上设置PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP标志,那么您的rwlock会在上述情况下阻止读者。

第二种情况是:

>最后一个持有人释放锁,读者和作家都在等待。

在这种情况下,NPTL将永远唤醒作家,而不是读者。

总而言之,上述意味着如果您使用PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP标志,您的作家不应该饿死(当然,现在连续的作家流可能会使读者饿死,C’est la vie)。您可以通过检查pthread_rwlock_rdlock.c和pthread_rwlock_unlock.c中的来源(全部非常可读)来确认所有这些。

请注意,还有一个PTHREAD_RWLOCK_PREFER_WRITER_NP,但它似乎没有正确的效果 – 很可能是一个错误(或者可能没有 – 见comment by jilles below)。

最后

以上就是美满豆芽为你收集整理的linux读写锁 饥饿,linux – 如何防止在pthreads读写锁中的作者饥饿的全部内容,希望文章能够帮你解决linux读写锁 饥饿,linux – 如何防止在pthreads读写锁中的作者饥饿所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部