Граф ожидания

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Граф ожидания (или граф ожидания транзакций) — инструмент, используемый при разработке СУБД и многопоточных систем и используемый, в частности, для определения ситуации взаимной блокировки (deadlock). Фактически, граф ожидания транзакций представляет собой ориентированный двудольный граф, содержащий вершины двух типов:

  • вершины типа T, соответствующие транзакциям или выполняющимся потокам. Они образуют первую долю графа.
  • вершины типа R, соответствующие ресурсам и объектам, которые могут быть захвачены транзакциями. Они образуют вторую долю графа.

Дуги графа ожидания также имеют двоякий смысл:

  • дуги (T,R), идущие из вершины-транзакции T в вершину-ресурс R, обозначают, что данный ресурс уже захвачен транзакцией
  • дуги (R,T), идущие из вершины-ресурса R в вершину-транзакцию T обозначают, что транзакция ожидает, пока ресурс R будет освобождён.

Простейшие свойства[править | править вики-текст]

  1. Ресурс, который не имеет ни одной входящей дуги, является свободным.
  2. Если вершина-транзакция имеет некоторое ненулевое количество входящих дуг, то соответствующий процесс (собственно транзакция) находится в состоянии ожидания, то есть приостановлен и не может выполняться в текущий момент времени.
  3. Если между двумя транзакциями существует путь T_1 \rightarrow T_2, то транзакция T_1 должна быть выполнена (завершена) раньше, чем начнётся выполнение T_2, поскольку последняя требует освобождения некоторых ресурсов, захваченных транзакцией T_1.

Из последнего свойства очевидным образом следует, что ситуации взаимной блокировки соответствует цикл на графе ожидания.

Источники[править | править вики-текст]