Ответ
В Go есть несколько примитивов синхронизации из пакета sync:
- Mutex (
sync.Mutex) - блокирует доступ к общему ресурсу:
var mu sync.Mutex
mu.Lock()
// критическая секция
mu.Unlock()
- RWMutex (
sync.RWMutex) - позволяет множественное чтение, но эксклюзивную запись:
var rw sync.RWMutex
rw.RLock() // для чтения
rw.Lock() // для записи
- WaitGroup (
sync.WaitGroup) - ожидание завершения группы горутин:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// работа
}()
wg.Wait()
- Once (
sync.Once) - гарантирует однократное выполнение:
var once sync.Once
once.Do(func() { /* инициализация */ })
-
Cond (
sync.Cond) - условные переменные для ожидания событий. -
Atomic операции (
sync/atomic) - атомарные операции с числами.
Также есть каналы (chan), которые являются основным средством коммуникации между горутинами в Go.
Видео-ответы
▶
Реальное Техническое Собеседование с ВК на Senior Php Разработчика
▶
Cобеседование на Middle в Go с тимлидом из X5: лайв-кодинг и теория
▶
Открытое интервью на Middle Go-разработчика
▶
Открытое интервью на Go-разработчика
▶
Моковое собеседование на Middle Golang разработчика | Solvery & Uproger
▶
Golang живое собеседование Middle Go разработчика!
▶
Тестовое собеседование на позицию Go-разработчика / Ingternet
▶
Mock-собеседование по Go от Team Lead Ozon
▶
Mock собеседование по Go (Junior) от Team Lead из Ozon
▶
MOCK-СОБЕСЕДОВАНИЕ EX-TINKOFF | BACKEND собеседование, знания Python, задачи на код
▶
Из Node JS в .NET разработчики | Тестовое собеседование C#