阅读罗伯特·洛夫(Robert Love)的LKD之后,我学习了rwlock和seqlock,它们都是基于自旋锁的。
当区分读写器时,rwlock优于spinlock,它将获得更好的性能。但是,rwlock将使作家感到饥饿。
seqlock解决了rwlock使得编写者感到饥饿的问题,但是seqlock的使用少于rwlock。那么,为什么rwlock比seqlock更受欢迎?
答案 0 :(得分:1)
seqlock 具有很强的限制,阅读器应该可以正确处理不一致的数据。
并非每种处理算法都允许数据不一致。在大多数情况下,此类数据只能是数字:整数,布尔值等。它们很少是指针,因为陈旧的指针可能指向已释放的内存,因此取消引用此类指针不是-不。
锁(以及其中的rw锁)没有“不一致的数据”限制,因此可以在更多情况下使用它们。
假定有两个结构域由单个seqlock保护。第一个字段a
每增加一次“写”,第二个字段b
每增加一次“写”。这两个字段最初都是0
。
On可能会假设阅读器总是会发现a + b
是0
。
但是对于seqlock,这是不正确的。例如,在读取a
和b
之间可能是“写”,因此a
的值将是旧的,而b
的值将是新的,而a + b
给出-1
。