Лекция: Begin ifthis - инициатор then

beginis_sent := true ;

forallq Î Out(this) dosend <wakeup> to q

end ;

While counter < card(Out(this)) do

beginreceive <wakeup>; counter := counter + 1 ;

If notis_sent then

beginis_sent := true ;

forall q Î Out(this) do send <wakeup> to q

End

end ;

(* Начало алгоритма из лекции 12 *)

Whilecard{q: Ørecp[q]} > 1 do

beginreceive (token, r) from q; recp[q] := true ;

if est(r) > est(m) then m := r

end;

send (token, m) to q0with Ørecp[q0] ;

receive (token, r) from q0;

if est(r) > est(m) then m := r; (* return(OK)с ответом m *)

ifm = this thenstate := coordinator elsestate := lost ;

forallq Î Out(this), q ¹ q0dosend (token, m) to q

End

 

Когда хотя бы один сайт инициирует выполнение алгоритма, все сайты посылают сообщения <wakeup> всем своим соседям, и каждый сайт начинает выполнение алгоритма для дерева после получения сообщения <wakeup> от каждого соседа. Все процессы завершают алгоритм для дерева с одним и тем же значением оценки, а именно, с наибольшей оценкой сайта. Единственный сайт с такой оценкой закончит выполнение в состоянии координатор, а все остальные сайты – в состоянии проигравший.

Через каждый канал пересылается по два сообщения <wakeup> и по два сообщения <tok,r>, откуда сложность сообщений равна 4N–4. В течение D единиц времени после того, как первый процесс начал алгоритм, каждый процесс послал сообщения <wakeup>, следовательно, в течение D+1 единиц времени каждый процесс начал волну. Легко заметить, что первое решение принимается не позднее, чем через D единиц времени после начала волны, а последнее решение принимается не позднее D единиц времени после первого, откуда полное время равно 3D+1.

Если порядок сообщений в канале может быть изменен (т.е. канал – не FIFO), процесс может получить сообщение (token, r) от соседа прежде чем он получил сообщение <wakeup> от этого соседа. В этом случае сообщение (token, r) может быть временно сохранено или обработано как сообщения (token, r), прибывающие позднее.

еще рефераты
Еще работы по информатике