Back to questions
Ozon Финтех
Middle+
6
Что такое гонка данных (race condition) в Go? Приведите пример
Companies where asked
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), каналы или другие механизмы синхронизации.