begin ifthis - инициаторthen
begin state := cand ; send (token, this) to Nextp ;
repeat receive (token, q) ;
if q = this then state := koordinator
else if est(this) <est(q) then
begin ifstate = candthen state := lost ;
send (token, q) to Nextp
end
until state = koordinator
end
else repeat receive (token, q) ; send (token, q) to Nextp ;
ifstate = sleep then state := lost
until false
(* Faqat koordinator dasturni tugatishi mumkin, barcha saytlarga ularning identifikatorlarini bildirish uchun xabar yuboradi. *)
P0 eng katta identifikator bilan boshlovchi bo'lishi mumkin. Barcha jarayonlar yoki tashabbuskorlar yoki p0dan kichik identifikatorlarga ega tashabbuskorlardir, shuning uchun barcha jarayonlar p0 tomonidan yuborilgan tokenga (token, p0) o'tadi. Shuning uchun, p0 markerini qaytarib oladi va tanlanadi.
Nomzodlarni tanlay olmaysiz, chunki ularning barchasi oxir-oqibat yo'qolib ketgan davlatga kelib, ular orqali p0 belgisi o'tadi. Ester (p)
9.5-rasm. Chang-Roberts algoritmi.
9.5.-rasmda Chang-Roberts algoritmining bajarilishida ma'lum bir nuqta bor. Ringda saytlar mavjud. Ringning tashqarisida ularning identifikatorlari ichki qismida - muvofiqlashtiruvchi tanlangan hisob-kitoblarning qiymatlari ko'rsatilgan. 2-raqamli doira - ko'rsatkich "31" qiymatiga ega bo'lgan sayt raqami ko'tarilgan marker (token, 2), o'q ko'rsatkich marker harakatining yo'nalishini bildiradi. Algoritm bajarilgan dastlabki sayt yulduzcha bilan belgilanadi - bu est (1) = 24 bo'lgan sayt.
|