#linux-kernel #locking
#linux-ядро #блокировка
Вопрос:
С точки зрения программирования они выглядят практически одинаково. Из того, что я прочитал при обновлении данных, RCU необходимо поддерживать старую копию до завершения всех операций чтения, что создает большие накладные расходы.
Это единственное различие, когда дело доходит до реализации?
Ответ №1:
Read-Copy-Update (RCU): не совпадает с блокировкой reader-writer, вот некоторые моменты, которые я могу обдумать:
-
Разделяет информацию об обновлении и восстановлении, где как читатели, так и писатели могли бы вообще избежать блокировки.
-
С точки зрения реализации RCU подходит для динамически распределяемых структур данных, таких как связанные списки, поскольку программа записи не изменяет данные на месте, а вместо этого выделяет новый элемент, который она инициализирует обновленными данными. Старый элемент заменяется новым элементом с использованием атомарного указателя, и тогда новые читатели увидят недавно обновленные данные. Недостатком является то, что старый reader по-прежнему будет видеть старую копию данных. Старая копия должна быть отслежена, и считыватели должны уведомить инфраструктуру RCU о том, что чтение завершено, чтобы старые данные можно было восстановить.
Read-writer-lock: здесь средство записи не позволяет другому устройству чтения или другой записи получить блокировку, в то время как оно уже получило блокировку. Несколько устройств чтения могут получить блокировку одновременно, при условии, что ни одно устройство записи не приняло блокировку.
надеюсь, это поможет!
Ответ №2:
Проще говоря,
RCU — Параллелизм разрешен между одним устройством записи и несколькими устройствами чтения
Блокировки чтения-записи — Одновременное чтение разрешено, но не операция записи