Можно ли читать старую или новую версию в замке RCU?

У меня есть вопрос по поводу блокировки RCU.

Насколько я знаю, RCU позволяет некоторым читателям (которые начались до льготного периода и заканчивается в льготном периоде) иметь либо старую версию, либо новую версию.

Посмотрите прикрепленное изображение.

введите описание изображения здесь

Таким образом, читатели, которые начинаются перед желтой частью и заканчиваются в желтой части, могут читать либо обновленное (удаленное) значение, либо старое значение.

Тем не менее, мой вопрос, почему читатель может иметь неопределенную ценность? Я думаю, что все читатели должны иметь определенную ценность, а это значит, что она не должна быть ни старой, ни новой ценностью.

Я что-то пропустил?

Благодарю.

1 ответ

Именно так работает RCU, и в этом основное отличие RCU от замков.

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

RCU по своему дизайну позволяет просматривать данные либо до обновления, либо после него, но для многих случаев использования это нормально. Основным преимуществом RCU является то, что читатели никогда не блокируются, а писатель никогда не блокируется.

Конечно, если логика вашей программы требует строгой согласованности данных между рабочими потоками - RCU не лучший выбор. Посмотрите на RW Locks тогда...

Другие вопросы по тегам