Sobes.tech
Назад к вопросам
Middle+
5

Что такое race condition и как его обойти?

Компании, где спрашивали
МВидеоМВидео

Ответ от нейросети

sobes.tech AI

Race condition — это ситуация в многопоточных или конкурентных программах, когда несколько потоков или горутин одновременно обращаются и изменяют общие данные без должной синхронизации. Это приводит к непредсказуемому поведению и ошибкам.

Чтобы избежать race condition в Go, используют механизмы синхронизации:

  • Mutex (sync.Mutex) — блокирует доступ к общему ресурсу, позволяя только одному потоку работать с ним в момент времени.
  • Channel — обеспечивает безопасный обмен данными между горутинами.
  • Atomic операции (sync/atomic) — для простых операций над переменными.

Пример с mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Такой подход гарантирует, что изменения переменной counter будут последовательными и не приведут к race condition.