为什么rwlock在linux内核中比seqlock更流行?

时间:2019-04-18 12:42:40

标签: linux-kernel locking

阅读罗伯特·洛夫(Robert Love)的LKD之后,我学习了rwlock和seqlock,它们都是基于自旋锁的。

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

seqlock解决了rwlock使得编写者感到饥饿的问题,但是seqlock的使用少于rwlock。那么,为什么rwlock比seqlock更受欢迎?

1 个答案:

答案 0 :(得分:1)

seqlock 具有很强的限制阅读器应该可以正确处理不一致的数据

并非每种处理算法都允许数据不一致。在大多数情况下,此类数据只能是数字:整数,布尔值等。它们很少是指针,因为陈旧的指针可能指向已释放的内存,因此取消引用此类指针不是-不。

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

seqlock下数据不一致的示例

假定有两个结构域由单个seqlock保护。第一个字段a每增加一次“写”,第二个字段b每增加一次“写”。这两个字段最初都是0

On可能会假设阅读器总是会发现a + b0

但是对于seqlock,这是不正确的。例如,在读取ab之间可能是“写”,因此a的值将是旧的,而b的值将是新的,而a + b给出-1