从编程角度看,它们对我来说几乎一样。根据我在更新数据时所阅读的内容,RCU需要维护一个旧的副本,直到所有读者都完成,这会产生很大的开销。
这是实施的唯一区别吗?
答案 0 :(得分:4)
读取 - 复制 - 更新(RCU):与读写器锁不同,以下是我可以想到的一些要点:
分隔更新和回收信息,读者和作者都可以完全避免锁定。
从实现的角度来看,RCU适用于动态分配的数据结构,例如链表,因为编写器不会就地修改数据,而是分配一个新元素,它使用更新的方式初始化数据。使用原子指针将旧元素替换为新元素,然后新读者将看到新更新的数据。缺点是旧读者仍会看到旧数据的副本。必须跟踪旧副本,读者必须通知RCU基础设施读取完成,以便回收旧数据。
读写器锁:这里写入器阻止另一个读取器或另一个写入器获取锁,而它已经获得了锁。如果没有作家锁定,多个读者可以同时获得锁定。
希望这有帮助!
答案 1 :(得分:1)
简单来说,
RCU - 单个编写者和多个读者之间允许并发
Reader-Writer锁 - 允许并发读取,但不允许写入操作