Semaphore vs Mutex
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. Mutex (objekt međusobne isključenosti) također se koristi za izbjegavanje pristupa zajedničkom resursu istovremeno s nekoliko istodobnih procesa.
Š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 Mutex?
Kada se pokrene računalna aplikacija, stvorit će mutex i priključiti ga na resurs. Kad se izvor koristi pomoću niti, on se zaključava, a drugi niti ne mogu koristiti. Ako druga nit želi koristiti isti resurs, morat će podnijeti zahtjev. Tada će se ta nit postaviti u red dok prva nit ne završi s resursom. Kada prva nit završi s resursom, zaključavanje će se ukloniti i nit koja čeka u redu može dobiti pristup resursu. Ako u redu čekanja čeka više niti, njima se omogućuje rotacija. Praktično, kada mutex izmjeni pristup resursu između više niti, bit će vidljivo kako više niti istovremeno troši resurs. Ali interno samo jedan niti pristupa izvoru u određenom trenutku.
Koja je razlika između Semaphora i Mutexa?
Iako se semafori i mutex objekti koriste za postizanje međusobne isključenosti u paralelnim programskim okruženjima, imaju određene razlike. Objekt mutex omogućuje samo jednoj niti da troši resurs ili kritični presjek, dok semafori dopuštaju ograničen broj istodobnih pristupa resursu (ispod maksimalno dozvoljenog broja). Uz mutex objekte, ostale niti koje žele pristupiti resoru moraju čekati u redu dok trenutna nit ne završi pomoću resursa.