0

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

在区分读写器时,rwlock 比 spinlock 更好,它会获得更好的性能。然而, rwlock 会让作家饿了。

seqlock 解决了 rwlock 使 writer 饿死的问题,但是 seqlock 的使用比 rwlock 少。那么,为什么 rwlock 比 seqlock 更受欢迎呢?

4

1 回答 1

1

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

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

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

seqlock下数据不一致的例子

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

On 可能会假设,读者总是会a + b发现0

但在 seqlock 的情况下,这是不正确的。例如,在读取ab它可能是“写入”之间,因此avalue 将是旧的,而bvalue 将是新的,并a + b给出-1.

于 2019-04-18T17:02:28.640 回答