Выбор ответа Middle sync и атомики обновлено
Когда RWMutex лучше Mutex
Вопрос
Когда sync.RWMutex действительно выигрывает у sync.Mutex?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Когда чтений намного больше записей. RWMutex позволяет читателям работать одновременно, но сам дороже: RLock и RUnlock делают атомарные операции над общим счётчиком, который при большом числе ядер становится узким местом.
Варианты ответа
- Всегда: RLock дешевле Lock в любом сценарии
- Когда записей больше, чем чтений
- Когда нужна реентерабельная блокировка чтения
- Когда чтений намного больше записейправильный ответ
Разбор
RWMutex позволяет читателям работать одновременно, но сам дороже: RLock и RUnlock делают атомарные операции над общим счётчиком, который при большом числе ядер становится узким местом. При коротких секциях или частых записях обычный Mutex часто не хуже. Реентерабельных мьютексов в Go нет: повторный Lock в той же горутине это дедлок, а RLock при ждущем писателе может застрять.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «sync и атомики»
- Глобальный максимум через CompareAndSwap
- Конкурентные переводы между счетами без дедлока
- Шардированная мапа с мьютексом на шард
- Что выведет Go: atomic.Int64 из 100 горутин
- Что выведет Go: sync.Once и OnceValue
- Код-ревью Go: кеш на RWMutex
- Код-ревью Go: ленивый синглтон и горячая перезагрузка конфига
- Типизированные атомики