Текущие читатели завершаются, ожидающий writer получает возможность взять Lock. Новые RLock блокируются, пока ожидающий писатель не выполнит запись и не освободит блокировку.
Представим ситуацию: несколько активных чтений, приходит запрос на запись (RWMutex). В каком порядке будут выполняться операции?
Текущие читатели завершаются, ожидающий writer получает возможность взять Lock. Новые RLock блокируются, пока ожидающий писатель не выполнит запись и не освободит блокировку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Текущие читатели завершаются, ожидающий writer получает возможность взять Lock. Новые RLock блокируются, пока ожидающий писатель не выполнит запись и не освободит блокировку.
Это предотвращает бесконечное оттеснение writer постоянно прибывающими читателями. Но RWMutex не обещает полный FIFO-порядок между всеми конкурентными вызовами. Нельзя держать RLock и пытаться повысить его до Lock; рекурсивное чтение также опасно, если уже ждёт писатель.
Источник: go.dev.