Semaphore vs Mutex
Semafor je podatkovna struktura, ki se uporablja za zagotovitev, da več procesov ne dostopa do skupnega vira ali kritičnega odseka hkrati v okoljih vzporednega programiranja. Semaforji se uporabljajo za izogibanje mrtvim ključavnicam in pogojem tekmovanja. Mutex (predmet medsebojnega izključevanja) se uporablja tudi za izogibanje dostopu do skupnega vira hkrati s strani več sočasnih procesov.
Kaj je semafor?
Semafor je podatkovna struktura, ki se uporablja za zagotavljanje medsebojne izključitve kritičnih odsekov. Semaforji večinoma podpirajo dve operaciji, imenovani čakanje (zgodovinsko znano kot P) in signal (zgodovinsko znano kot V). Operacija čakanja blokira proces, dokler se semafor ne odpre in operacija signala dovoli vstop drugemu procesu (niti). Vsak semafor je povezan s čakalno vrsto čakajočih procesov. Ko nit pokliče čakalno operacijo, če je semafor odprt, se nit lahko nadaljuje. Če je semafor zaprt, ko nit pokliče operacijo čakanja, je nit blokirana in mora čakati v čakalni vrsti. Operacija signala odpre semafor in če v čakalni vrsti že čaka nit, se ta proces lahko nadaljuje in če v čakalni vrsti ni čakajočih niti, se signal zapomni za naslednje niti. Obstajata dve vrsti semaforjev, imenovani semaforji mutex in semaforji za štetje. Semaforji Mutex omogočajo en sam dostop do vira, semaforji s štetjem pa omogočajo več nitim dostop do vira (ki ima na voljo več enot).
Kaj je Mutex?
Ko se računalniška aplikacija zažene, bo ustvarila mutex in jo priložila viru. Ko nit uporablja vir, je zaklenjen in ga druge niti ne morejo uporabljati. Če druga nit želi uporabiti isti vir, bo morala podati zahtevo. Nato bo ta nit postavljena v čakalno vrsto, dokler prva nit ne bo končala z virom. Ko je prva nit končana z virom, bo zaklepanje odstranjeno in nit, ki čaka v čakalni vrsti, lahko dobi dostop do vira. Če v čakalni vrsti čaka več niti, se jim omogoči rotacijski dostop. Praktično, ko mutex izmenjuje dostop do vira med več nitmi, bo to vidno, ker več niti porablja vir hkrati. Toda interno samo ena nit dostopa do vira v določenem času.
Kakšna je razlika med Semaphore in Mutex?
Čeprav se tako semaforji kot objekti mutex uporabljajo za doseganje medsebojne izključitve v okoljih vzporednega programiranja, imajo nekaj razlik. Objekt mutex dovoljuje samo eni niti, da porabi vir ali kritični odsek, medtem ko semaforji dovoljujejo omejeno število hkratnih dostopov do vira (pod največjim dovoljenim številom). Pri objektih mutex morajo druge niti, ki želijo dostopati do vira, čakati v čakalni vrsti, dokler trenutna nit ne konča z uporabo vira.