Sobes.tech
Назад к вопросам
Senior
3

Какие средства синхронизации в Go знаешь?

Компании, где спрашивали
ВайлдберрисВайлдберрис

Ответ от нейросети

sobes.tech AI

В Go для синхронизации и координации горутин используются следующие основные средства:

  • Mutex (sync.Mutex) — обеспечивает взаимное исключение, блокируя доступ к разделяемым ресурсам.

  • RWMutex (sync.RWMutex) — расширение Mutex, позволяющее нескольким горутинам читать одновременно, но блокирующее запись.

  • WaitGroup (sync.WaitGroup) — позволяет ждать завершения группы горутин.

  • Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении определённого состояния.

  • Channel (chan) — основной инструмент коммуникации и синхронизации между горутинами, позволяющий передавать данные и блокировать выполнение до получения значения.

Пример использования Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Пример использования WaitGroup:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // работа
}()
go func() {
    defer wg.Done()
    // работа
}()
wg.Wait()

Таким образом, Go предоставляет мощные и простые в использовании примитивы для синхронизации параллельных процессов.