Sobes.tech
Back to questions
Middle
5

Что такое race condition и как с ним бороться в Go?

Companies where asked
VKVK

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 для атомарных операций с переменными.

Важно всегда контролировать доступ к разделяемым данным, чтобы избежать гонок и обеспечить корректность программы.