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