Linux kernel 读拷贝更新和读写器锁定之间的区别?

Linux kernel 读拷贝更新和读写器锁定之间的区别?,linux-kernel,locking,Linux Kernel,Locking,从编程的角度来看,它们看起来非常相似。根据我在更新数据时读到的内容,RCU需要维护一个旧副本,直到所有读卡器都完成为止,这会产生很大的开销 这是实现的唯一区别吗?读取副本更新(RCU):与读写器锁定不同,我可以考虑以下几点: 分离更新和回收信息,读写器都可以避免完全锁定 从实现的角度来看,RCU适用于动态分配的数据结构,如链表,因为编写器不会就地修改数据,而是分配一个新元素,并用更新的数据初始化该元素。使用原子指针将旧元素替换为新元素,然后新的读卡器将看到新更新的数据。缺点是旧的读取器仍然会看到

从编程的角度来看,它们看起来非常相似。根据我在更新数据时读到的内容,RCU需要维护一个旧副本,直到所有读卡器都完成为止,这会产生很大的开销

这是实现的唯一区别吗?

读取副本更新(RCU):与读写器锁定不同,我可以考虑以下几点:

  • 分离更新和回收信息,读写器都可以避免完全锁定

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

  • 读写器锁:在这里,一个写器阻止另一个读写器获得锁,而它已经获得了锁。多个读卡器可以同时获取一个锁,前提是没有编写器获取该锁

    希望这有帮助

    简单地说

    RCU-允许在单个写入程序和多个读取器之间并发

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