Mutex vs. semafori
Mutex on analoginen huoneen yhden avaimen kanssa. Henkilö, jolla on säiettä vastaava avain, on ainoa, jolla on pääsy huoneeseen. Pääsyn omaavan henkilön on sitten luovuttava avain seuraavalle rivillä olevalle henkilölle. Siksi mutexin voi vapauttaa vain säie, joka sen hanki.
Mutexiä käytetään yleensä sarjanumerointiin pääsyyn reentrant-koodin osiin, "sellaiseen koodiin, jota useat säikeet eivät voi suorittaa kerralla. Vain yksi lanka on sallittu osaan. Tämä pakottaa jonossa olevat muut säikeet odottamaan. Ennen kuin lanka pääsee käsiksi, sen on odotettava lankaa, ennen kuin se luopuu osasta.
Käyttämällä samaa analogiaa mutexissä, semaforit ovat lukumäärä samanlaisia avaimia, jotka pääsevät samaan määrään huoneita, joilla on samanlaiset lukot. Semafori tai semaforimäärän arvo riippuu ihmisten (ketjujen) määrästä, jotka tulevat huoneesta tai poistuvat huoneesta. Jos huoneita on 5 ja ne ovat kaikki varattuja, semaforien määrä on nolla. Jos kaksi poistuu huoneesta, lukumäärä on kaksi ja kaksi avainta annetaan jonossa seuraaville kahdelle.
Tämän sanottua semaforit voidaan samanaikaisesti signaloida millä tahansa säikeellä tai prosessilla, ja ne ovat ihanteellisia sovelluksille, jotka vaativat synkronointia. Siitä huolimatta semaforia käytetään rajoittamaan tehokkaasti yhteisen resurssin samanaikaisten käyttäjien määrää maksimaalisen semaforimäärän perusteella.
Joten mutexia voidaan periaatteessa pitää semaforina, jonka arvo on yksi.
Semaforin vähennys ja lisäys riippuvat siitä, vaativatko säikeet pääsyä yhteiseen resurssiin vai lähtevätkö osa.
Teoriassa mutex ja (binaariset) semaforit ovat semanttisesti samanlaisia. Mutex voidaan toteuttaa käyttämällä semaforia ja niin on päinvastoin. Käytännössä ne voivat kuitenkin olla hiukan erilaisia.
Mutekseja on tarkoitettu käytettäväksi vain keskinäiseen poissulkemiseen ja binaarisia semaforia on tarkoitus käyttää keskinäiseen poissulkemiseen ja tapahtumien ilmoittamiseen. Vaikka ne ovat toteutuksen ja yleisen semantiikan suhteen hyvin samankaltaisia, niitä käytetään eri tavalla.
Yhteenveto:
1. Mutexiä käytetään tyypillisesti pääsyyn yhteiseen resurssiin, kun taas semafori on useita samanaikaisia pääsyjä.
2. Mutex on kuin semafori, jonka lukumäärä on yksi.
3. Mutex sallii pääsyn vain yhdelle säikeelle, kun taas semaforit voivat samanaikaisesti ilmaista mikä tahansa säie tai prosessi.
4. Semaforit ovat ihanteellisia synkronointiin ja niitä käytetään usein tapahtumien ilmoittamiseen ja keskinäiseen poissulkemiseen, kun taas mutexiä käytetään vain keskinäiseen poissulkemiseen.