Какие средства синхронизации в 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 предоставляет мощные и простые в использовании примитивы для синхронизации параллельных процессов.