Ответ
Lock у Mutex — это операция захвата блокировки, которая обеспечивает эксклюзивный доступ к общему ресурсу. Пока один горутина держит Lock, другие горутины блокируются при попытке захватить тот же Mutex, предотвращая гонки данных.
Пример:
var mu sync.Mutex
var sharedData int
func increment() {
mu.Lock() // Захватываем блокировку
sharedData++ // Безопасная работа с sharedData
mu.Unlock() // Освобождаем блокировку
}
Важно:
- Всегда освобождайте Mutex через
Unlock(), иначе deadlock - Используйте
defer mu.Unlock()для гарантированного освобождения - Не держите блокировку дольше необходимого (минимизируйте критические секции)