Карточка Junior sync и атомики обновлено
Детектор гонок
Вопрос
Как найти гонку данных в Go-программе?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Запустить с флагом -race: go test -race ./... или go run -race. Детектор сообщает о конкурентных доступах, которые реально случились во время выполнения, со стеками обеих горутин.
Ответ
Запустить с флагом -race: go test -race ./... или go run -race. Детектор сообщает о конкурентных доступах, которые реально случились во время выполнения, со стеками обеих горутин.
Разбор
Он находит только случившиеся гонки, поэтому нужны тесты с конкурентной нагрузкой. Замедление в 2-20 раз и рост памяти, поэтому используют в CI, а не в проде. Требует cgo.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «sync и атомики»
- Глобальный максимум через CompareAndSwap
- Конкурентные переводы между счетами без дедлока
- Шардированная мапа с мьютексом на шард
- Что выведет Go: atomic.Int64 из 100 горутин
- Что выведет Go: sync.Once и OnceValue
- Код-ревью Go: кеш на RWMutex
- Код-ревью Go: ленивый синглтон и горячая перезагрузка конфига
- Типизированные атомики