Назад к вопросам
Wildberries
Middle+
4
Какие средства синхронизации в Go ты знаешь?
Компании, где спрашивали
Ответ от нейросети
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 // получение значения