Read-Copy-Update和Reader-Writer-Lock之间的区别?

时间:2014-07-06 17:52:26

标签: linux-kernel locking

从编程角度看,它们对我来说几乎一样。根据我在更新数据时所阅读的内容,RCU需要维护一个旧的副本,直到所有读者都完成,这会产生很大的开销。

这是实施的唯一区别吗?

2 个答案:

答案 0 :(得分:4)

读取 - 复制 - 更新(RCU):与读写器锁不同,以下是我可以想到的一些要点:

  1. 分隔更新和回收信息,读者和作者都可以完全避免锁定。

  2. 从实现的角度来看,RCU适用于动态分配的数据结构,例如链表,因为编写器不会就地修改数据,而是分配一个新元素,它使用更新的方式初始化数据。使用原子指针将旧元素替换为新元素,然后新读者将看到新更新的数据。缺点是旧读者仍会看到旧数据的副本。必须跟踪旧副本,读者必须通知RCU基础设施读取完成,以便回收旧数据。

  3. 读写器锁:这里写入器阻止另一个读取器或另一个写入器获取锁,而它已经获得了锁。如果没有作家锁定,多个读者可以同时获得锁定。

    希望这有帮助!

答案 1 :(得分:1)

简单来说,

RCU - 单个编写者和多个读者之间允许并发

Reader-Writer锁 - 允许并发读取,但不允许写入操作