Компоненты и технологии • №2 '2011 компоненты



Pdf көрінісі
бет89/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   85   86   87   88   89   90   91   92   ...   129
Kurniz

Взаимная блокировка
Взаимная блокировка (Deadlock или Deadly 
Embrace) — это ситуация в многозадачной си-
стеме, когда несколько задач находятся в со-
стоянии бесконечного ожидания доступа к ре-
сурсам, занятым самими этими задачами [8].
Простейший пример взаимной блокиров-
ки включает две задачи — задачу А и задачу Б 
и два мьютекса — мьютекс 1 и мьютекс 2. 
Взаимная блокировка может произойти при 
такой последовательности событий:
Выполняется задача А, которая успешно 

захватывает мьютекс 1.
Задача Б вытесняет задачу А.

Задача Б успешно захватывает мьютекс 2, 

после чего пытается захватить и мьютекс 1. 
Это ей не удается, и она блокируется в ожи-
дании освобождения мьютекса 1.
Управление снова получает задача А. Она 

пытается захватить мьютекс 2, однако он 
уже захвачен задачей Б. Поэтому задача 
А блокируется в ожидании освобождения 
мьютекса 2.
В итоге получаем ситуацию, когда задача А 
заблокирована в ожидании освобождения мью-
текса 2, захваченного задачей Б. Задача Б забло-
кирована в ожидании освобождения мьютек-
са 1, захваченного задачей А. Графически эта 
ситуация представлена на рис. 8.
Впрочем, в состояние взаимной блокиров-
ки может попасть любое количество задач, 
находящихся в круговой зависимости друг 
от друга. Если ситуация взаимной блокиров-
ки единожды наступила, то выход из этой си-
туации невозможен.
Как и в случае с инверсией приоритетов, 
лучший способ избежать взаимной блоки-
ровки задач — это исключить такую возмож-
ность на этапе проектирования программы, 
то есть не создавать круговой зависимости 
задач друг от друга.
Следует отметить, что помимо рассмо-
тренных выше проблем совместного доступа 
к ресурсам существуют еще такие, как голо-
дание (Starvation) и разновидность взаимной 
блокировки, при которой задачи не блокиру-
ются, но и не выполняют полезной работы 
(Livelock). Подробнее с ними можно ознако-
миться в [9].


Достарыңызбен бөлісу:
1   ...   85   86   87   88   89   90   91   92   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет