Какой результат выведет программа с горутинами №23

Точное значение не гарантировано: total++ — несинхронизированная операция чтения-изменения-записи, а Sleep не устанавливает ожидание завершения. Возможны потерянные увеличения и data race.

Короткий ответ

Что ответить на собеседовании

Точное значение не гарантировано: total++ — несинхронизированная операция чтения-изменения-записи, а Sleep не устанавливает ожидание завершения. Возможны потерянные увеличения и data race.

Подробный разбор

Ответ с пояснениями

Условие

Каким будет вывод программы, использующей несколько горутин?

var total = 0

func main() {
    for idx := 0; idx < 10; idx++ {
        go func() { total++ }()
    }
    time.Sleep(2 * time.Second)
    fmt.Println(total)
}

Ответ

Точное значение не гарантировано: total++ — несинхронизированная операция чтения-изменения-записи, а Sleep не устанавливает ожидание завершения. Возможны потерянные увеличения и data race.

Защитите увеличение mutex либо используйте atomic.Int64.Add. Затем дождитесь всех десяти горутин через WaitGroup и только после этого прочитайте счётчик. Одна атомарность без ожидания не гарантирует итог 10 на момент печати; одно ожидание без защиты не убирает потерянные обновления.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее