Русская Википедия:Граф ожидания
Материал из Онлайн справочника
Граф ожидания (или граф ожидания транзакций) — инструмент, используемый при разработке СУБД и многопоточных систем и используемый, в частности, для определения ситуации взаимной блокировки (deadlock). Фактически, граф ожидания транзакций представляет собой ориентированный двудольный граф, содержащий вершины двух типов:
- вершины типа <math>T</math>, соответствующие транзакциям или выполняющимся потокам. Они образуют первую долю графа.
- вершины типа <math>R</math>, соответствующие ресурсам и объектам, которые могут быть захвачены транзакциями. Они образуют вторую долю графа.
Дуги графа ожидания также имеют двоякий смысл:
- дуги <math>(T,R)</math>, идущие из вершины-транзакции <math>T</math> в вершину-ресурс <math>R</math>, обозначают, что данный ресурс уже захвачен транзакцией
- дуги <math>(R,T)</math>, идущие из вершины-ресурса <math>R</math> в вершину-транзакцию <math>T</math> обозначают, что транзакция ожидает, пока ресурс <math>R</math> будет освобождён.
Простейшие свойства
- Ресурс, который не имеет ни одной входящей дуги, является свободным.
- Если вершина-транзакция имеет некоторое ненулевое количество входящих дуг, то соответствующий процесс (собственно транзакция) находится в состоянии ожидания, то есть приостановлен и не может выполняться в текущий момент времени.
- Если между двумя транзакциями существует путь <math>T_1 \rightarrow T_2</math>, то транзакция <math>T_1</math> должна быть выполнена (завершена) раньше, чем начнётся выполнение <math>T_2</math>, поскольку последняя требует освобождения некоторых ресурсов, захваченных транзакцией <math>T_1</math>.
Из последнего свойства очевидным образом следует, что ситуации взаимной блокировки соответствует цикл на графе ожидания.
Источники