Мьютекс (sync.Mutex) — примитив синхронизации для защиты shared-данных от конкурентного доступа. Только одна горутина может держать блокировку.
var (
mu sync.Mutex
balance int
)
func Deposit(amount int) {
mu.Lock()
defer mu.Unlock()
balance += amount
}
sync.RWMutex — read-write мьютекс: множество горутин читают одновременно (RLock), но запись (Lock) эксклюзивна. Используй RWMutex когда чтений значительно больше записей.
Важно: мьютекс в Go не реентрантный — повторный Lock() из той же горутины приведёт к deadlock.