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

Какие есть средства синхронизации при многопоточности в Go?

Компании, где спрашивали
I-teco

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

sobes.tech AI

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

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

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

var mu sync.Mutex
var counter int

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

Пример использования канала для синхронизации:

done := make(chan bool)
go func() {
    // работа
    done <- true
}()
<-done // ожидание завершения