Szemafor vs monitor
Semaphore egy olyan adatstruktúra, amely biztosítja, hogy párhuzamos programozási környezetekben több folyamat ne férhessen hozzá egy közös erőforráshoz vagy egy kritikus szakaszhoz egyszerre. A szemaforokat a holt zárak és a versenyfeltételek elkerülésére használják. A Monitor egy programozási nyelvi konstrukció, amelyet arra is használnak, hogy elkerülje, hogy több folyamat egyidejűleg hozzáférjen egy közös erőforráshoz, így garantálja a kölcsönös kizárást. A monitorok feltételes változókat használnak a feladat végrehajtásához.
Mi az a szemafor?
Semaphore egy olyan adatstruktúra, amely a kritikus szakaszok kölcsönös kizárására szolgál. A szemaforok főleg két műveletet támogatnak, az úgynevezett várakozást (történelmi nevén P) és jelet (történelmi nevén V). 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 egy sor várakozó folyamathoz 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, a szál blokkolva van, és várnia kell a sorban. A jelművelet megnyit egy szemafort, és ha már van egy szál a sorban, akkor ez a folyamat folytatható, és ha nincs várakozó szál a sorban, a jel megjegyzi a következő szálakat. Kétféle szemafor létezik, amelyeket mutex szemaforoknak és számláló szemaforoknak neveznek. A Mutex szemaforok egyetlen hozzáférést tesznek lehetővé egy erőforráshoz, a számláló szemaforok pedig lehetővé teszik, hogy több szál is hozzáférjen egy erőforráshoz (amelynek több egysége van).
Mi az a monitor?
A monitor egy programozási nyelvi konstrukció, amely a megosztott adatokhoz való hozzáférés szabályozására szolgál. A monitorok megosztott adatstruktúrákat, eljárásokat (amelyek megosztott adatstruktúrákon működnek) és a párhuzamos eljáráshívások közötti szinkronizálást foglalják magukba. A monitor gondoskodik arról, hogy adatai ne legyenek strukturálatlan hozzáféréssel szembesülve, és garantálja, hogy a lépcsőfokok (amelyek eljárásai révén hozzáférnek a monitor adataihoz) legitim módon működjenek együtt. A monitor garantálja a kölcsönös kizárást azáltal, hogy egy adott időpontban csak egy szál hajthat végre bármilyen megfigyelési eljárást. Ha egy másik szál megpróbál meghívni egy metódust 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. Főleg ütemezési szemantikában különböznek.
Mi a különbség a szemafor és a monitor között?
Bár mind a szemaforokat, mind a monitorokat a kölcsönös kizárás elérésére használják párhuzamos programozási környezetekben, ezek különböznek a feladat végrehajtásához használt technikákban. A monitorokban a kölcsönös kizárás elérésére használt kód egy helyen található, és strukturáltabb, míg a szemaforok kódja várakozási és jelzési függvényhívásként kerül elosztásra. Ezenkívül nagyon könnyű hibákat elkövetni a szemaforok implementálásakor, míg a monitorok implementálásakor nagyon kicsi az esély a hibákra. Ezenkívül a monitorok feltételváltozókat használnak, míg a szemaforok nem.