Szemafor vs Monitor
A szemafor egy olyan adatstruktúra, amelyet annak biztosítására használnak, hogy több folyamat ne érjen el egyszerre egy közös erőforrást vagy egy kritikus részt párhuzamos programozási környezetekben. A szemaforokat a holt zárak és a versenyfeltételek elkerülésére használják. A Monitor egy olyan programozási nyelvű konstrukció, amelyet arra is használnak, hogy elkerüljék a több folyamat egyidejű hozzáférését egy közös erőforráshoz, ezért garantálja a kölcsönös kizárást. A monitorok feltételes változókat használnak ennek a feladatnak az eléréséhez.
Mi az a szemafor?
A szemafor egy olyan adatstruktúra, amelyet kölcsönös kizárás biztosítására használnak a kritikus szakaszok számára. A szemaforok főleg két várakozást (történelmileg P néven) és jelet (történelmileg V néven) támogatnak. A várakozási művelet blokkol egy folyamatot, amíg a szemafor meg nem nyílik, és a jelművelet lehetővé teszi egy másik folyamat (szál) belépését. Minden szemafor a várakozási folyamatok sorához kapcsolódik. Ha a várakozási műveletet egy szál hívja meg, ha a szemafor nyitva van, a szál folytatódhat. Ha a szemafor bezárul, amikor a várakozási műveletet egy szál hívja meg, akkor a szál blokkolva van, és várakoznia kell a sorban. A jelművelet nyit egy szemaforot, és ha a sorban már várakozik egy szál, akkor a folyamat folytatódhat, és ha a sorban nincs várakozó szál, akkor a következő szálakra emlékezni fog a jel. Kétféle szemafor létezik, amelyeket mutex szemaforoknak nevezünk, és a szemaforok számlálásának. A Mutex szemaforák egyetlen hozzáférést tesznek lehetővé egy erőforráshoz, a szemaforok számlálása pedig több szál hozzáférését teszi lehetővé egy erőforráshoz (amelynek több egysége van).
Mi az a monitor?
A monitor egy programozási nyelvi konstrukció, amelyet a megosztott adatokhoz való hozzáférés ellenőrzésére használnak. A monitorok megosztják a megosztott adatstruktúrákat, az eljárásokat (amelyek megosztott adatstruktúrákon működnek) és az egyidejű eljáráshívások közötti szinkronizálást. A monitor gondoskodik arról, hogy az adatai ne legyenek strukturálatlan hozzáféréssel szembesülve, és garantálja, hogy a futófelületek (amelyek a monitor adataihoz az eljárásai révén férnek hozzá) legitim módon működjenek együtt. A monitor garantálja a kölcsönös kizárást azáltal, hogy csak egy szálon hajthatja végre a monitor eljárását egy adott időben. Ha egy másik szál megpróbál egy metódust meghívni a monitoron, miközben egy szál már végrehajt egy eljárást a monitoron, akkor a második eljárás blokkolva van, és várnia kell a sorban. Kétféle monitor van, a Hoare monitorok és a Mesa monitorok. Főleg ütemezési szemantikájukban különböznek egymástól.
Mi a különbség a szemafor és a monitor között?
Annak ellenére, hogy a szemaforákat és a monitorokat egyaránt használják a kölcsönös kirekesztés elérésére párhuzamos programozási környezetekben, különböznek a feladat eléréséhez használt technikákban. A monitorokban a kölcsönös kizárás elérésére használt kód egyetlen helyen van és strukturáltabb, míg a szemaforok kódja várakozási és jelfunkciós hívásokként kerül elosztásra. Emellett nagyon könnyű hibázni a szemaforok megvalósításakor, míg a monitorok megvalósításakor nagyon kevés az esély a hibákra. Továbbá a monitorok feltételváltozókat használnak, míg a szemaforok nem.