Фазовый алгоритм является децентрализованным алгоритмом для произвольных ориентированных графов. Двунаправленные связи тоже могут присутствовать, но они должны быть заданы парой параллельных встречных однонаправленных каналов (дуг графа). Алгоритм требует, чтобы процессам на сайтах был известен диаметр d графа, либо его оценка сверху.
Переменные в тексте алгоритма имеют следующий смысл.
counter_out – счетчик, подсчитывающий количество маркеров token, посланных каждому из соседей по выходу. Если таких соседей у некоторого сайта, например, три, то за каждой единицей счетчика стоит три посланных маркера – по одному на каждого соседа.
counter_in – массив счетчиков, по одному счетчику на каждого соседа по входу. Хранит количество маркеров, посланных соседями.
this – сайт, процесс которого исполняет данный алгоритм.
Out() – множество вершин, смежных по выходу.
u – некоторый сайт, передавший маркер.
Функция min, примененная к массиву, выбирает из него минимальный элемент.
var counter_in: array [0..d] ofinteger init0;
counter_out: integer init0 ;