Ответ
RWMutex (Read-Write Mutex) — это блокировка в Go, которая позволяет нескольким горутинам одновременно читать данные, но только одной — писать. Это эффективнее обычного Mutex, когда операции чтения частые, а записи редкие.
Основные методы:
RLock()— блокировка для чтения (множественный доступ)RUnlock()— разблокировка чтенияLock()— эксклюзивная блокировка для записиUnlock()— разблокировка записи
Пример:
var (
data map[string]string
mutex sync.RWMutex
)
func read(key string) string {
mutex.RLock()
defer mutex.RUnlock()
return data[key]
}
func write(key, value string) {
mutex.Lock()
defer mutex.Unlock()
data[key] = value
}
Важно: Нельзя обновлять RLock до Lock (deadlock). Читающие горутины ждут завершения всех операций записи перед получением доступа.