Back to questions
Senior
6
Какие есть средства синхронизации при многопоточности в Go?
Companies where asked
I-teco
Answer from AI
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 // ожидание завершения