Способы синхронизации в Go?

Middle
846 просмотров
AFK Offer AI

Основные примитивы:

1. sync.Mutex / sync.RWMutex — классические мьютексы

var mu sync.Mutex
mu.Lock()
defer mu.Unlock()

2. Каналы — идиоматичный способ, "share memory by communicating"

3. sync.WaitGroup — ожидание завершения группы горутин

4. sync.Once — гарантированный однократный вызов (инициализация)

5. sync.Map — конкурентно-безопасная map

6. sync/atomic — атомарные операции (счётчики, флаги)

7. context.Context — отмена и таймауты

8. sync.Cond — условные переменные (редко используются)

Правило: каналы для передачи данных и оркестрации, мьютексы для защиты shared state.

Следующий вопрос

Что такое error wrapping?