Semaphore vs Monitor
Semaphore je struktura podataka koja se koristi da bi se osiguralo da više postupaka ne pristupa istodobno zajedničkom resursu ili kritičnom odjeljku u paralelnim programskim okruženjima. Semafori se koriste kako bi se izbjegle mrtve brave i uvjeti utrke. Monitor je konstrukcija programskog jezika koja se također koristi da bi se izbjeglo da više procesa pristupa zajedničkom resursu istovremeno, pa time jamči međusobno isključenje. Monitori koriste uvjetne varijable da bi postigli ovaj zadatak.
Što je semafor?
Semafor je struktura podataka koja se koristi za međusobno isključivanje kritičnih odjeljaka. Semafore uglavnom podržavaju dvije operacije koje se zovu čekanje (povijesno poznato kao P) i signal (povijesno poznato kao V). Operacija čekanja blokira postupak dok se semafor ne otvori i signal signala dopušta ulazak još jednog procesa (niti). Svaki semafor povezan je s redovima čekanja. Kad se operacija čekanja zove nit, ako je semafor otvoren, nit se može nastaviti. Ako je semafor zatvoren kada se operacija čekanja zove nit, nit se blokira i mora čekati u redu čekanja. Operacija signala otvara semafor i ako postoji nit koja već čeka u redu, taj se postupak dopušta, a ako u redu čekanja nema niti, signal se pamti za sljedeće teme. Postoje dvije vrste semafora koji se nazivaju mutex semafori i brojeći semafori. Mutex semafori omogućuju jednostruki pristup resursu, a brojanje semafora omogućava više niti da pristupe resursu (koji ima na raspolaganju nekoliko jedinica).
Što je Monitor?
Monitor je konstrukcija programskog jezika koja se koristi za kontrolu pristupa zajedničkim podacima. Monitori uklapaju zajedničke strukture podataka, postupke (koji djeluju na dijeljene strukture podataka) i sinkronizaciju između istodobnih poziva postupka. Monitor osigurava da njegovi podaci nisu suočeni s nestrukturiranim pristupima i jamči da gaze (koji pristupaju podacima monitora kroz svoje postupke) na zakonit način. Monitor jamči međusobno isključivanje dopuštajući samo jednoj niti da izvrši bilo koji postupak praćenja u određenom trenutku. Ako drugi nit pokušava pozvati metodu u monitor, dok nit već izvršava postupak u monitoru, onda je drugi postupak blokiran i mora čekati u redu čekanja. Postoje dvije vrste monitora s nazivima Hoare i Mesa. Oni se uglavnom razlikuju po semantičkim planovima planiranja.
Koja je razlika između Semaphora i Monitora?
Iako se i semafori i monitori koriste za postizanje međusobne isključenosti u paralelnim programskim okruženjima, oni se razlikuju u tehnikama koje se koriste za postizanje ovog zadatka. U monitorima se kôd koji se koristi za postizanje međusobne isključenosti nalazi na jednom mjestu i više je strukturiran, dok se kod za semafore distribuira kao poziv na čekanje i signal. Također, vrlo je lako pogriješiti prilikom implementacije semafora, dok je vrlo malo šanse za pogrešku prilikom implementacije monitora. Nadalje, monitori koriste varijable stanja, dok semafore nemaju.