По порядку Junior sync и атомики обновлено

Как найти и исправить гонку данных

Вопрос

Расставьте шаги работы с подозрением на гонку данных.

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    Добавить синхронизацию: мьютекс, атомик или канал
  2. 2
    Написать тест, который нагружает код из нескольких горутин
  3. 3
    Запустить go test -race
  4. 4
    Повторно прогнать тест с -race и включить флаг в CI
  5. 5
    Изучить отчёт: два стека с конфликтующими доступами
Показать ответ и разбор

Коротко

Детектор находит только гонки, которые реально случились, поэтому сначала нужен код, который их провоцирует. Отчёт показывает обе стороны конфликта, по ним выбирают способ синхронизации, а прогон в CI не даёт регрессии.

Правильный порядок

  1. 1
    Написать тест, который нагружает код из нескольких горутин
  2. 2
    Запустить go test -race
  3. 3
    Изучить отчёт: два стека с конфликтующими доступами
  4. 4
    Добавить синхронизацию: мьютекс, атомик или канал
  5. 5
    Повторно прогнать тест с -race и включить флаг в CI

Разбор

Детектор находит только гонки, которые реально случились, поэтому сначала нужен код, который их провоцирует. Отчёт показывает обе стороны конфликта, по ним выбирают способ синхронизации, а прогон в CI не даёт регрессии.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.