Semafor in monitor

Razvrščanje na podlagi listkov s številkami je prav dobra rešitev, kot smo videli pri delikatesi. Kako pa se obnese pri bolj uradnih organih, recimo v obveščevalnih organizacijah, kot so SOVA, MI5, FBI, CIA in tudi Butalski Špijon? Ko v Butalah prideš do skrivnega laboratorija, pred njim naletiš na varnostnika. Varnostnik vsakemu obiskovalcu izroči kartico z napisom gost, ki omogoča vstop v laboratorij. Da pa ima varnostnik vse obiskovalce pod nadzorom, ima le eno kartico in vstop v laboratorij dovoli le enemu naenkrat. Šele ko prvi obiskovalec izstopi in vrne kartico, jo varnostnik izroči naslednjemu obiskovalcu ter tako naprej.

Tak način razporejanja imenujemo tudi semafor, ki ima dve operaciji: pridobi kartico in vrni kartico, medtem ko je laboratorij pri programiranju običajno skupno mesto v pomnilniku.

Simulacija delčka uporabe semaforja:


Pri Butalskem Špijonu imajo novo tajno nalogo. Tako tajno, da agenti ne vedo, kaj počnejo drugi agenti, temveč zgolj vpisujejo rezultate v skupno knjigo. Knjiga je v laboratoriju in agent pride v laboratorij, si sposodi knjigo, vanjo vpiše svoje ugotovitve ter jo vrne nazaj. Odločili so se, da za usklajevanje ne bodo uporabljali semaforja, ker je zadnjič Laudon Štimani preprosto pozabil vrniti kartico, tako da nihče več ni mogel v laboratorij.

V vsakem trenutku bo veljalo, da je lahko v laboratoriju največ en agent. V laboratorij bodo tako vstopali posamično (čakalna vrsta vstopa). Če bo knjiga (VIR) v laboratoriju, jo bodo vzeli in odšli z njo iz laboratorija, če pa je ne bo tam, se bodo postavili v drugo vrsto (čakalna vrsta za vir). Ko bodo knjigo uporabili, jo bodo prinesli nazaj v laboratorij in signalizirali (vklop žarnice na spodnji animaciji) morebitnemu prvemu v čakalni vrsti za vir, da je knjiga na voljo. Slednji bo seveda nemudoma vstopil v laboratorij, pobral knjigo in odšel z njo iz laboratorija.

Konstrukt, ki ga tokrat uporabljamo za nadzor dostopa do skupnega vira, se imenuje monitor. Slednji ponuja štiri atomične operacije: vstopi (ang. call), s katero proces (v našem primeru agent) vstopi v monitor; izstopi (ang. return), s katero izstopi iz njega; počakaj (ang. wait), s katero se postavi v vrsto za vir; in signaliziraj (ang. signal ali notify), s katero omogočimo prvemu v čakalni vrsti za vir, da vstopi v monitor. V monitorju je v vsakem trenutku največ en proces.