sync.Mutex — это взаимоисключающая блокировка в Go, которая защищает общие ресурсы от одновременного доступа несколькими goroutine'ами. Она гарантирует, что только одна goroutine может получить доступ к критической секции кода одновременно.
Lock() и Unlock()Lock(), она получает исключительный доступ к защищённому ресурсуvar mu sync.Mutex
var counter int
mu.Lock()
counter++
mu.Unlock()
Lock() с Unlock(), чтобы избежать дедлоковdefer, чтобы гарантировать освобождение блокировки даже при возникновении ошибок:mu.Lock()
defer mu.Unlock()
counter++
sync.Mutex — это zero-value type, то есть ты можешь объявить его без инициализацииИспользуй sync.Mutex когда тебе нужно:
Заметка: Для более простых паттернов синхронизации рассмотри альтернативы типа sync.RWMutex (для сценариев с преобладающим чтением) или каналы (для коммуникации между goroutine'ами).
sync.Mutex позволяет нескольким goroutine одновременно читать общий ресурс, но только один goroutine может писать в него одновременно.
Новый — ещё не проверен сообществом
Вы