Sobes.tech
Back to questions
Middle+
6

Что такое гонка данных (race condition) в Go? Приведите пример

Companies where asked
Ozon ФинтехOzon Финтех

Answer from AI

sobes.tech AI

Гонка данных (race condition) в Go — это ситуация, когда несколько горутин одновременно обращаются к одной и той же переменной без должной синхронизации, и хотя бы одна из них изменяет её. Это приводит к непредсказуемому поведению программы.

Пример гонки данных:

package main

import (
    "fmt"
    "time"
)

func main() {
    counter := 0

    for i := 0; i < 1000; i++ {
        go func() {
            counter++ // Несинхронизированное изменение
        }()
    }

    time.Sleep(time.Second)
    fmt.Println("Counter:", counter) // Результат может быть меньше 1000 из-за гонки
}

В этом примере множество горутин одновременно увеличивают переменную counter без синхронизации, что приводит к потере обновлений. Чтобы избежать гонок, используют мьютексы (sync.Mutex), каналы или другие механизмы синхронизации.