Состояние гонки
Интерактивное демо «Состояние гонки» — раздел Энциклопедия · Код и разработка.
Гонка данных и синхронизация
Шесть операций над общим балансом в трёх потоках — сравните результат без защиты и с мьютексом, семафором или атомарными операциями
Потоки читают и пишут баланс без блокировки — часть обновлений теряется.
Счётрасхождение
1000 ₽
Ожидается: 1300 ₽ · Δ -300 ₽
Фазы потоков (критическая секция)
Поток 1
Поток 2
Поток 3
чтениевычислениезаписьожиданиеблокировка
Потоки
💤
Поток 1 · депозит
ожидание
💤
Поток 2 · снятие
ожидание
💤
Поток 3 · перевод
ожидание
Лог операций
Нажмите "Запустить", чтобы увидеть пересечение операций
Гонка данных
Потоки читают и пишут баланс без блокировки — часть обновлений теряется.
Deadlock, starvation, livelock
Deadlock — взаимное ожидание ресурсов; starvation — поток никогда не получает CPU/блокировку; livelock — потоки уступают друг другу, но работа не продвигается. Выбор примитива синхронизации зависит от гранулярности критической секции и допустимого параллелизма.