Szemafor vs Monitor
A szemafor egy olyan adatszerkezet, amelyet annak biztosítására használnak, hogy több folyamat párhuzamos programozási környezetekben nem férjen hozzá egyszerre egy közös erőforráshoz vagy egy kritikus szakaszhoz. A szemaforákat arra használják, hogy elkerüljék a halott zárakat és a versenyfeltételeket. A Monitor egy programozási nyelvi konstrukció, amelyet arra is használnak, hogy elkerüljék a több folyamat egyidejűleg közös erőforráshoz való hozzáférését, ezért garantálja a kölcsönös kizárást. A monitorok e feltételhez feltételes változókat használnak.
Mi egy szemafor?
A szemafor olyan adatszerkezet, amelyet a kritikus szakaszok kölcsönös kizárására használnak. A szemaforok elsősorban két olyan műveletet támogatnak, melyeket várakozás (történelmileg P néven ismert) és jel (történelmileg V néven ismert). A várakozási művelet blokkolja a folyamatot, amíg a szemafor nyitva van, és a jelművelet lehetővé teszi egy másik folyamat (szál) belépését. Minden szemafor egy várakozási folyamat sorral van társítva. Ha a várakozási műveletet egy szál hívja, ha a szemafor nyitva van, a szál folytatódhat. Ha a szemafor zárva van, amikor a várakozási műveletet egy szál hívja, akkor a szál blokkolódik, és meg kell várnia a sorban. A jelművelet megnyit egy szemaforot, és ha egy szál már vár a sorban, akkor ezt a folyamatot folytatni lehet, és ha nincs szálak a várakozási sorban, akkor a jel a következő szálak számára emlékezetbe kerül. Kétféle szemafor létezik: mutex szemaforok és számláló szemaforok. A Mutex szemaforok egyetlen hozzáférést tesznek lehetővé egy erőforráshoz, és a semaforok számlálása lehetővé teszi több szál számára az erőforráshoz való hozzáférést (amelynek több egység elérhető).
Mi az a monitor??
A monitor egy programozási nyelvi konstrukció, amelyet a megosztott adatokhoz való hozzáférés vezérlésére használnak. A monitorok megosztják a megosztott adatszerkezeteket, az eljárásokat (amelyek megosztott adatszerkezeteken működnek) és a szinkronizálást az egyidejű eljáráshívások között. A monitor gondoskodik arról, hogy adatai ne legyenek strukturálatlan hozzáférésekkel szemben, és garantálja, hogy a futófelületek (amelyek az eljárások révén hozzáférnek a monitor adataihoz) törvényes módon lépnek kölcsönhatásba. A monitor garantálja a kölcsönös kizárást azáltal, hogy csak egy szál engedélyezi a monitor folyamatának végrehajtását egy adott időben. Ha egy másik szál megkísérel egy módszert 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 létezik: Hoare monitorok és Mesa monitorok. Elsősorban az ütemezési szemantika szempontjából különböznek egymástól.
Mi a különbség a Semaphore és a Monitor között??
Annak ellenére, hogy mind a szemaforákat, mind a monitorokat használják a kölcsönös kirekesztés elérésére a párhuzamos programozási környezetekben, különböznek a feladat megvalósításához használt technikák. Monitorokban a kölcsönös kizáráshoz használt kód egy helyen van és strukturáltabb, míg a szemaforok kódja várakozási és jelfüggvény-hívásokként van elosztva. Ezenkívül nagyon könnyű hibázni a szemaforok végrehajtásakor, míg a monitorok végrehajtásakor nagyon kevés esély van a hibák elkövetésére. Ezenkívül a monitorok feltételes változókat használnak, míg a szemaforok nem.