为什么rwlock比linux内核中的seqlock更受欢迎? [关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么rwlock比linux内核中的seqlock更受欢迎? [关闭]相关的知识,希望对你有一定的参考价值。

在阅读了Robert Love的LKD之后,我学习了rwlock和seqlock,它们都基于自旋锁。

当区分读写器时,rwlock优于自旋锁,它将获得更好的性能。但是,rwlock会让作家感到饥饿。

seqlock解决rwlock使编写器遇到问题,但是,使用seqlock比使用rwlock要少。那么,为什么rwlock比seqlock更受欢迎?

答案

seqlock有一个很大的局限性,读者应该正确处理不一致的数据。

并非每种处理算法都允许不一致的数据。在大多数情况下,这样的数据只能是数字:整数,布尔值等。它们很少可以是指针,因为过时的指针可能指向已经释放的内存,因此解除引用这样的指针是禁忌。

锁(以及它们之间的rw-locks)没有“不一致的数据”限制,因此可以在更多情况下使用它们。

Example of inconstisten data under seqlock

假设有两个结构的字段受单个seqlock保护。第一个字段a按每个“写入”递增,第二个字段b按每个“写入”递减。这两个领域最初都是0

可以假设,读者总是会发现a + b0

但是在seqlock的情况下,这不是真的。例如,在阅读ab之间它可能是“写”,所以a值将是旧的,b值将是新的,而a + b给出-1

以上是关于为什么rwlock比linux内核中的seqlock更受欢迎? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

内核中的锁机制--RCU

linux 内核的另一个自旋锁 - 读写锁

Linux 2.6内核中新的锁机制--RCU

如何在 FreeBSD 中创建进程间 rwlock?

04lock_03rwlock

写入 Linux 管道的速度比文件快,但在内核级别,为啥?