Вступить в клуб →
средняявопросКонкурентность: горутины, каналы, context

Инкремент общего счётчика из тысячи горутин

Метрику обработанных сообщений считают так:

var processed int
var wg sync.WaitGroup

for i := 0; i < 1000; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        processed++
    }()
}
wg.Wait()
fmt.Println(processed)

Локально печатается 1000, в поде на нескольких ядрах цифры расходятся. Какое утверждение верное?

  • Всегда напечатает 1000: `wg.Wait()` синхронизирует доступ к переменной
  • Всегда напечатает 1000: инкремент `int` в Go атомарен
  • Напечатает число не больше 1000, значение недетерминировано — это гонка данных
  • Рантайм сам обнаружит гонку и завершит программу с паникой

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела