Sobes.tech
Back to questions
Middle+
3

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

Companies where asked
WildberriesWildberries

Answer from AI

sobes.tech AI

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

  • Mutex (sync.Mutex) — базовый примитив для взаимного исключения, блокирует доступ к разделяемым данным.
  • RWMutex (sync.RWMutex) — расширенный мьютекс, позволяющий нескольким читателям одновременно читать, но блокирующий запись.
  • WaitGroup (sync.WaitGroup) — позволяет ждать завершения группы горутин.
  • Cond (sync.Cond) — условная переменная для уведомления горутин о наступлении события.
  • Atomic операции (sync/atomic) — для безопасного изменения переменных без блокировок.
  • Каналы (chan) — основной идиоматический способ синхронизации и передачи данных между горутинами.

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

var mu sync.Mutex
var counter int

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

Каналы позволяют синхронизировать выполнение и обмениваться данными:

ch := make(chan int)
go func() {
    ch <- 42 // отправка значения
}()
val := <-ch // получение значения