sync.Mutex?sync.Mutex обеспечивает взаимное исключение: только одна горутина может держать блокировку. Lock() блокирует до освобождения, Unlock() освобождает. Защищает критическую секцию от одновременного доступа.
var mu sync.Mutex
var counter int
func inc() {
mu.Lock()
defer mu.Unlock()
counter++
}
Типичный паттерн: defer mu.Unlock() сразу после Lock(), чтобы не забыть разблокировать.