82.2. ПРОБЛЕМЫ СИНХРОНИЗАЦИИ
Deadlocks
Для того чтобы избежать deadlocks, надо всегда аллокировать локи в одном порядке.
К сожалению так бывает не всегда (например если у нас разные приложения),
тогда операционная система должна их отслеживать и возвращать ошибку в функции
ожидающей захват лока.
Deadlocks
Процессом P1 захвачен ресурс M1
Процессом P2 захвачен ресурс М2
P1: OWN: M1
P1: WAIT: --
P2: OWN: M2
P2: WAIT: --
Процесс P1 хочет захватить ресурс М2
Система смотрит зависимости:
M2 -(owner)- P2 -(wait) - NONE
Система ставит P1 ждать
P1: OWN: M1
P1: WAIT: M2
P2: OWN: M2
P2: WAIT: --
Процесс P2 хочет захватить ресурс M1
Система смотрит дерево зависимостей
M1 -(owner)- P1 -(wait)- M2 -(owner)- CURRENT_PROCESS
Вот он - DEADLOCK
Типичное действие операционной системы не дать делать этот Wait
процессу P2, и еще выбить процесс P1 из его ожидания M2,
со статусом - типа deadlock
Lost Wakeup
Index Prev Next