Play IT

Состояние гонки

Интерактивное демо «Состояние гонки» — раздел Энциклопедия · Код и разработка.

code-devencyclopedia

Гонка данных и синхронизация

Шесть операций над общим балансом в трёх потоках — сравните результат без защиты и с мьютексом, семафором или атомарными операциями

Потоки читают и пишут баланс без блокировки — часть обновлений теряется.

Счётрасхождение

1000
Ожидается: 1300 ₽ · Δ -300
Фазы потоков (критическая секция)
Поток 1
Поток 2
Поток 3
чтениевычислениезаписьожиданиеблокировка

Потоки

💤
Поток 1 · депозит
ожидание
💤
Поток 2 · снятие
ожидание
💤
Поток 3 · перевод
ожидание

Лог операций

Нажмите "Запустить", чтобы увидеть пересечение операций
Гонка данных

Потоки читают и пишут баланс без блокировки — часть обновлений теряется.

Deadlock, starvation, livelock

Deadlock — взаимное ожидание ресурсов; starvation — поток никогда не получает CPU/блокировку; livelock — потоки уступают друг другу, но работа не продвигается. Выбор примитива синхронизации зависит от гранулярности критической секции и допустимого параллелизма.