Semaphore vs Mutex
Semafor je podatkovna struktura koja se koristi kako bi se osiguralo da više procesa ne pristupa zajedničkom resursu ili kritičnom odjeljku u isto vrijeme, u okruženjima paralelnog programiranja. Semafori se koriste za izbjegavanje mrtvih brava i uvjeta utrke. Mutex (Mutual Exclusion Object) također se koristi za izbjegavanje pristupa zajedničkom resursu u isto vrijeme od strane nekoliko istodobnih procesa.
Što je semafor?
Semafor je podatkovna struktura koja se koristi za pružanje međusobnog isključivanja kritičnih odjeljaka. Semafori uglavnom podržavaju dvije operacije koje se nazivaju čekanje (povijesno poznato kao P) i signal (povijesno poznato kao V). Operacija čekanja blokira proces dok se semafor ne otvori i operacija signala ne dopusti ulazak drugom procesu (niti). Svaki semafor povezan je s redom čekanja procesa. Kada nit pozove operaciju čekanja, ako je semafor otvoren, nit se može nastaviti. Ako se semafor zatvori kada nit pozove operaciju čekanja, nit je blokirana i mora čekati u redu. Operacija signala otvara semafor i ako postoji nit koja već čeka u redu čekanja, tom se procesu dopušta nastavak, a ako nema niti koje čekaju u redu čekanja, signal se pamti za sljedeće niti. Postoje dvije vrste semafora koji se nazivaju mutex semafori i semafori za brojanje. Mutex semafori dopuštaju jedan pristup resursu, a brojeći semafori dopuštaju više niti da pristupe resursu (koji ima nekoliko dostupnih jedinica).
Što je Mutex?
Kada se pokrene računalna aplikacija, ona će stvoriti mutex i priložiti ga resursu. Kada nit koristi resurs, on je zaključan i druge ga niti ne mogu koristiti. Ako druga nit želi koristiti isti resurs, morat će podnijeti zahtjev. Tada će ta nit biti smještena u red dok prva nit ne završi s resursom. Kada prva nit završi s resursom, zaključavanje će biti uklonjeno i nit koja čeka u redu čekanja može dobiti pristup resursu. Ako postoji više niti koje čekaju u redu čekanja, dobivaju pristup na rotirajućoj osnovi. Praktično, kada mutex izmjenjuje pristup resursu između nekoliko niti, to će biti vidljivo jer više niti istovremeno troše resurs. Ali interno samo jedna nit pristupa resursu u određenom trenutku.
Koja je razlika između Semaphorea i Mutexa?
Iako se i semafori i mutex objekti koriste za postizanje međusobnog isključivanja u okruženjima paralelnog programiranja, oni imaju neke razlike. Mutex objekt dopušta samo jednoj niti da konzumira resurs ili kritični odjeljak, dok semafori dopuštaju ograničeni broj istodobnih pristupa resursu (ispod maksimalno dopuštenog broja). S mutex objektima, druge niti koje žele pristupiti resursu moraju čekati u redu dok trenutna nit ne završi s korištenjem resursa.