Read-Copy-Update和read - writer语言 - lock的区别



从编程的角度来看,它们看起来非常相似。从我读到的更新数据来看,RCU需要维护一个旧的副本,直到所有的reader都完成,这造成了很大的开销。

这是实现的唯一区别吗?

Read-Copy-Update (RCU):与读写锁不同,这里有一些我能想到的要点:

  1. 分隔更新和回收信息,读取和写入都可以避免锁定。

  2. 从实现的角度来看,RCU适合于动态分配的数据结构,比如链表,因为writer不需要修改数据,而是分配一个新的元素,用更新后的数据初始化。使用原子指针将旧元素替换为新元素,然后新的读取器将看到新更新的数据。缺点是旧的读者仍然会看到旧的数据副本。旧的副本必须被跟踪,并且reader必须通知RCU基础架构读取完成,以便旧的数据可以回收。

read -write -lock:当一个写程序已经获得锁时,它阻止另一个读程序或另一个写程序获取该锁。如果没有写器获取锁,多个读器可以同时获取锁。

希望这对你有帮助!

简单来说,

RCU -允许在一个写器和多个读器之间并发

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

最新更新