Ответ
Mutex (взаимное исключение) обеспечивает эксклюзивный доступ к ресурсу — только одна горутина может захватить блокировку для чтения или записи.
RWMutex (read-write mutex) разделяет доступ:
- Множество горутин могут читать (
RLock()), если нет блокировки на запись. - Только одна горутина может писать (
Lock()), блокируя все остальные операции.
Пример:
var (
mu sync.Mutex
rw sync.RWMutex
data int
)
// Mutex (любая операция блокирует)
mu.Lock()
data = 42 // запись
mu.Unlock()
// RWMutex (оптимизация для частого чтения)
rw.RLock()
_ = data // чтение (много горутин)
rw.RUnlock()
rw.Lock()
data = 100 // запись (эксклюзивно)
rw.Unlock()
Когда использовать:
Mutex— если операции записи частые или критическая секция небольшая.RWMutex— если чтение происходит значительно чаще записи (например, кэш).
Видео-ответы
▶
▶
▶