Back to questions
VK
Middle
5
Что такое race condition и как с ним бороться в Go?
Companies where asked
Answer from AI
sobes.tech AI
Race condition — это ситуация, когда несколько горутин одновременно обращаются к общим данным без синхронизации, что приводит к непредсказуемому поведению и ошибкам.
В Go с этим борются следующими способами:
- Использование мьютексов (sync.Mutex) для блокировки доступа к общим ресурсам:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
- Применение каналов (channels) для передачи данных между горутинами, избегая совместного доступа к переменным:
ch := make(chan int)
go func() {
ch <- 1 // отправка значения
}()
val := <-ch // получение значения
- Использование пакета sync/atomic для атомарных операций с переменными.
Важно всегда контролировать доступ к разделяемым данным, чтобы избежать гонок и обеспечить корректность программы.