Semafori vs Mutex
Semafori on tietorakenne, jota käytetään varmistamaan, että useat prosessit eivät pääse yhteiseen resurssiin tai kriittiseen osaan samanaikaisesti, rinnakkaisissa ohjelmointiympäristöissä. Semaforia käytetään kuolleiden lukkojen ja kilpailuolosuhteiden välttämiseksi. Mutexiä (keskinäistä poissulkemisobjektia) käytetään myös välttämään pääsy yhteiseen resurssiin samanaikaisesti useiden samanaikaisten prosessien avulla.
Mikä on semafori?
Semafori on tietorakenne, jota käytetään antamaan keskinäinen poissulkeminen kriittisiin osiin. Semaforit tukevat pääasiassa kahta operaatiota, joita kutsutaan odottaa (historiallisesti tunnetaan nimellä P) ja signaali (historiallisesti tunnetaan nimellä V). Odotusoperaatio estää prosessia, kunnes semafori on auki ja signaalitoiminto sallii toisen prosessin (säie) pääsyn. Jokainen semafori liittyy odotusprosessien jonoon. Kun säie kutsuu odotustoimintoa, jos semafori on auki, säie voi jatkua. Jos semafori suljetaan, kun säie kutsuu odotusoperaatiota, lanka tukkeutuu ja sen on odotettava jonossa. Signaalitoiminto avaa semaforin ja jos jonossa on jo jonkinlainen ketju, prosessin annetaan edetä ja jos jonossa ei ole ketjuja, signaali muistetaan seuraaville ketjuille. On olemassa kahden tyyppisiä semaforia, joita kutsutaan mutex-semaforiksi ja laskevia semaforia. Mutex-semaforit sallivat yhden pääsyn resurssiin ja laskennalliset semaforit sallivat useiden ketjujen pääsyn resurssiin (jolla on käytettävissä useita yksiköitä).
Mikä on Mutex?
Kun tietokonesovellus käynnistetään, se luo mutexin ja liittää sen resurssiin. Kun säie käyttää säiettä, se on lukittu ja muut ketjut eivät voi käyttää sitä. Jos toinen säie haluaa käyttää samaa resurssia, sen on tehtävä pyyntö. Sitten tämä säie sijoitetaan jonoon, kunnes ensimmäinen säie on valmis resurssilla. Kun ensimmäinen säie on valmis resurssilla, lukitus poistetaan ja jonoon odottava säie voi päästä resurssiin. Jos jonossa odottaa useita ketjuja, heille annetaan pääsy kiertävästi. Käytännössä, kun mutex vuorottelee resurssin käyttöoikeuden useiden ketjujen välillä, se on näkyvissä, koska useat ketjut kuluttavat resurssia samanaikaisesti. Mutta sisäisesti vain yksi säie käyttää resurssia tiettyyn aikaan.
Mitä eroa on Semaforin ja Mutexin välillä??
Vaikka sekä semaforia että mutex-objekteja käytetään saavuttamaan keskinäinen poissulkeminen rinnakkaisissa ohjelmointiympäristöissä, niillä on joitain eroja. Mutex-objekti sallii vain yhden säikeen kuluttaa resurssin tai kriittisen osan, kun taas semaforit sallivat rajoitetun määrän resurssien samanaikaisia käyttöoikeuksia (suurimman sallitun määrän alapuolella). Mutex-objektien kanssa muiden ketjujen, jotka haluavat käyttää resurssia, on odotettava jonossa, kunnes nykyinen ketju on valmis resurssin avulla.