C语言 为什么 rwlock 在 Linux 内核中比 seqlock 更受欢迎?



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

当区分读取器和写入器时,rwlock比自旋锁更好,它会获得更好的性能。然而,rwlock会让作家感到不安。

Seqlock解决了Rwlock制作作家Hungury问题,但是,Seqlock的使用比RWLOCK少。那么,为什么 rwlock 比 seqlock 更受欢迎?

seqlock有一个很强的限制即读者应该正确处理不一致的数据

并非每种处理算法都允许不稳定的数据。在大多数情况下,此类数据只能是数字:整数、布尔值等。它们很少可以成为指针,因为过时的指针可能指向已经释放的内存,因此取消引用此类指针是不行的。

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

seqlock 下的不连续数据示例

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

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

但是在seqlock的情况下,这不是真的。 例如,在读取ab之间,它可以"写入",因此a值将是旧的,b值将是新的,并且a + b给出-1

相关内容

  • 没有找到相关文章

最新更新