Pr-1st-1.1-m05-Slajd49
Przykład działania algorytmu (2)
Drugi przykład zastosowania algorytmu przedstawia kolejny slajd. Rozważany teraz graf jest podobny do poprzedniego, z tą tylko różnicą, że węzeł nie ma krawędzi wychodzącej.
Oznacza to, że proces jest aktywny. Załóżmy jeszcze, że każdy proces oczekuje potwierdzeń od wszystkich procesów tworzących jego zbiór warunkujący. Niech ponadto będzie ponownie jedynym inicjatorem. Rozpoczyna on fazę powiadamiania, wysyłając wiadomość typu NOTIFY do monitorów wszystkich procesów tworzących zbiór ,. Kiedy wiadomość typu NOTIFY dotrze do , którego , monitor wywołuje procedurę NotifyProc. Procedura ta zmienia stan na 1, a następnie wywołuje procedurę ConfirmProc. W efekcie, i wiadomość typu CONFIRM zostaje wysłana do monitorów wszystkich procesów tworzących zbiór . W kroku tym, monitory i zmieniają swoje zmienne stanu oraz na 1 i wysyłają wiadomości typu NOTIFY do monitorów wszystkich procesów tworzących ich zbiory . Tak więc monitor jest inicjatorem fazy potwierdzania dla , i . Tym samym wyśle wiadomość typu DONE do inicjatora jego fazy powiadamiania, czyli do , dopiero po otrzymaniu wiadomości typu ACK, w odpowiedzi na wszystkie wiadomości typu CONFIRM. W następnym kroku, między innymi monitor otrzymuje wiadomość typu CONFIRM od i przekazuje ją do wszystkich swoich poprzedników w grafie.
Należy zauważyć, że w kroku tym nie przesyła wiadomości typu CONFIRM do , gdyż w przyjętym modelu żądań jest to dopuszczalne dopiero po otrzymaniu wiadomości typu CONFIRM od wszystkich następników w grafie. Warunek ten jest spełniony w następnym kroku, kiedy to otrzymał już wiadomość typu CONFIRM od . Wówczas, wysyła wiadomość typu CONFIRM do . W efekcie, w następnym kroku wiadomości typu ACK przesłane są kolejno do , i . Gdy wiadomość typu ACK dotrze do , monitor ten kończy fazę potwierdzania, co umożliwia mu wysłanie wiadomości typu DONE do monitora będącego dla inicjatorem jego fazy powiadamiania.