luk*_*uke 4 locking linux-kernel
从编程的角度来看,它们在我看来几乎相同。从我更新数据时读取的内容来看,RCU 需要维护一个旧副本,直到所有读取器都完成,这会产生很大的开销。
这是实施方面的唯一区别吗?
Read-Copy-Update (RCU):与读写锁不同,以下是我能想到的一些要点:
分离更新和回收信息,读者和作者都可以完全避免锁定。
从实现的角度来看,RCU 适用于动态分配的数据结构,例如链表,因为编写器不会就地修改数据,而是分配一个新元素,它使用更新的数据进行初始化。使用原子指针将旧元素替换为新元素,然后新读者将看到新更新的数据。缺点是老读者仍然会看到数据的旧副本。必须跟踪旧副本,并且读取器必须通知 RCU 基础结构读取已完成,以便可以回收旧数据。
读-写-锁:这里一个写者阻止另一个读者或另一个写者获得锁,而它已经获得了锁。多个读者可以同时获取一个锁,前提是没有写者取得了锁。
希望这可以帮助!