Разница между Read-Copy-Update и Reader-Writer-Lock?

#linux-kernel #locking

#linux-ядро #блокировка

Вопрос:

С точки зрения программирования они выглядят практически одинаково. Из того, что я прочитал при обновлении данных, RCU необходимо поддерживать старую копию до завершения всех операций чтения, что создает большие накладные расходы.

Это единственное различие, когда дело доходит до реализации?

Ответ №1:

Read-Copy-Update (RCU): не совпадает с блокировкой reader-writer, вот некоторые моменты, которые я могу обдумать:

  1. Разделяет информацию об обновлении и восстановлении, где как читатели, так и писатели могли бы вообще избежать блокировки.

  2. С точки зрения реализации RCU подходит для динамически распределяемых структур данных, таких как связанные списки, поскольку программа записи не изменяет данные на месте, а вместо этого выделяет новый элемент, который она инициализирует обновленными данными. Старый элемент заменяется новым элементом с использованием атомарного указателя, и тогда новые читатели увидят недавно обновленные данные. Недостатком является то, что старый reader по-прежнему будет видеть старую копию данных. Старая копия должна быть отслежена, и считыватели должны уведомить инфраструктуру RCU о том, что чтение завершено, чтобы старые данные можно было восстановить.

Read-writer-lock: здесь средство записи не позволяет другому устройству чтения или другой записи получить блокировку, в то время как оно уже получило блокировку. Несколько устройств чтения могут получить блокировку одновременно, при условии, что ни одно устройство записи не приняло блокировку.

надеюсь, это поможет!

Ответ №2:

Проще говоря,

RCU — Параллелизм разрешен между одним устройством записи и несколькими устройствами чтения

Блокировки чтения-записи — Одновременное чтение разрешено, но не операция записи