Concurrency 当所有线程都是潜在的更新程序时,rcu在某种程度上有用吗?

Concurrency 当所有线程都是潜在的更新程序时,rcu在某种程度上有用吗?,concurrency,linux-kernel,rcu,Concurrency,Linux Kernel,Rcu,我的问题实际上是针对linux的rcu列表实现的。我需要为从列表中读取和更新(比如删除该条目)的任何关键部分保留一个旋转锁,因为读取后看到的rcu版本可能不适合更新。所以对于我的情况,我有很多线程在某个时间点或其他时间点进行更新。在这种情况下,您认为有没有一种方法可以有效地利用(即最小化持有自旋锁的部分)rcu实现?与读取相比,当更新很少时,rcu是好的 我不认为所有线程都是潜在的更新程序有什么关系。如果它们实际上经常更新,那么RCU不适合您。如果它们很少更新,这可能是好的。不,这一点是,如果您

我的问题实际上是针对linux的rcu列表实现的。我需要为从列表中读取和更新(比如删除该条目)的任何关键部分保留一个旋转锁,因为读取后看到的rcu版本可能不适合更新。所以对于我的情况,我有很多线程在某个时间点或其他时间点进行更新。在这种情况下,您认为有没有一种方法可以有效地利用(即最小化持有自旋锁的部分)rcu实现?

与读取相比,当更新很少时,rcu是好的


我不认为所有线程都是潜在的更新程序有什么关系。如果它们实际上经常更新,那么RCU不适合您。如果它们很少更新,这可能是好的。

不,这一点是,如果您只有一个更新程序,您可以只使用RCU。但是如果有多个,你可能需要一个锁。因此,如果没有多个更新程序,则RCU很有用。你相信我的论点吗?我不明白为什么更新程序的数量很重要。只有他们的频率。RCU允许读卡器在当前没有更新的情况下几乎不承担任何开销,这非常有用,无论写入程序的数量如何。如果有多个更新程序,每个更新程序都必须使用写锁,这将影响性能。我想rcu的意义不仅仅在于没有更新,即使你有并发更新,我认为它比futex好(它没有开销,除非有争用)。RCU的想法是拥有数据结构的多个视图。但是,如果您有多个更新程序,此算法无法确保更新程序之间的任何同步。这有意义吗?