A szemafor és a mutex közötti különbség az, hogy a szemafor egy jelátviteli mechanizmus, azaz a folyamatok várakozási () és jel () műveletet hajtanak végre annak jelzésére, hogy az erőforrást megszerzik-e, míg a Mutex záró mechanizmus, a folyamatnak be kell szereznie a zárolást mutex objektum, ha meg akarja szerezni az erőforrást. Van még néhány különbség a szemafor és a mutex között, vitassuk meg őket az alábbi táblázat segítségével.
Összehasonlító táblázat
Az összehasonlítás alapja | Szemafor | mutex |
---|---|---|
Alapvető | A szemafor egy jelző mechanizmus. | A Mutex egy reteszelő mechanizmus. |
Létezés | A szemafor egy egész változó. | A Mutex egy objektum. |
Funkció | A szemafor lehetővé teszi, hogy a többszörös programszálak hozzáférjenek a források véges példányához. | A Mutex lehetővé teszi, hogy a többszörös programszál egyetlen erőforráshoz férjen hozzá, de nem egyszerre. |
Tulajdonjog | A szemafor értékét az erőforrást megszerző vagy felszabadító bármely folyamat módosíthatja. | A Mutex objektum zárolását csak az a folyamat hajtja végre, amely a zárat megszerezte. |
kategorizál | A szemafor kategorizálható szemaforra és bináris szemaforra. | A Mutex nem kategorizálódik tovább. |
Művelet | A szemafor értékét a várakozási () és a jel () művelettel módosítják. | A Mutex objektum zárolása vagy feloldása az erőforrást kérő vagy felszabadító eljárással történik. |
Foglalt források | Ha minden erőforrást használnak, az erőforrást igénylő folyamat a várakozási () műveletet végrehajtja, és blokkolja magát, amíg a szemaforszám nem lesz nagyobb. | Ha egy mutex objektum már zárolva van, akkor az erőforrásokat igénylő folyamat várakozik és várakozással áll a rendszer által, amíg a zár ki nem jelenik. |
A szemafor definíciója
A szemafor egy folyamat szinkronizáló eszköz. A szemafor jellemzően egy S változó egész változó, amelyet a rendszerben lévő erőforrások számához inicializálnak, és a szemafor értékét csak két funkció várhatja () és jelet () az inicializáláson kívül.
A várakozási () és a jel () művelet megválaszthatatlanul módosítja a szemafor értékét. Ez azt jelenti, hogy amikor egy folyamat módosítja a szemafor értékét, egyetlen más folyamat sem módosíthatja egyszerre a szemafor értékét. A szemaforot az operációs rendszer megkülönbözteti két kategóriában: szemaforok és bináris szemafor .
A Semaphore számlálás során a szemafor S értéket a rendszerben lévő erőforrás számának inicializálására inicializáljuk. Amikor egy folyamat meg akarja férni az erőforráshoz, akkor a szemaforon várakozó () műveletet hajt végre, és a szemafor értékét egyenként csökkenti. Amikor felszabadítja az erőforrást, a szemaforon jel () műveletet hajt végre, és a szemafor értékét egyenként növeli . Amikor a szemaforszám 0-ra megy, ez azt jelenti, hogy az összes erőforrást a folyamatok foglalják el. Ha egy folyamatnak erőforrást kell használnia, ha a szemaforszám 0, akkor végrehajtja a várakozást () és blokkolja, amíg a szemafor értéke nem lesz nagyobb, mint 0.
A bináris szemaforban a szemafor értéke 0 és 1 között van . Ez hasonló a mutex zárhoz, de a mutex egy reteszelő mechanizmus, míg a szemafor egy jelző mechanizmus. A bináris szemaforban, ha egy folyamat elérni kívánja az erőforrást, akkor a szemaforon várakozó () műveletet hajt végre, és 1-ről 0-ra csökkenti a szemafor értékét. Amikor kiadja az erőforrást, akkor egy szignál () műveletet hajt végre a szemaforon és a lépéseken. értéke 1. Ha a szemafor értéke 0, és a folyamat elérni kívánja az erőforrást, akkor a várakozási () műveletet hajtja végre, és blokkolja magát, amíg az aktuális erőforrást kihasználó folyamat ki nem adja az erőforrást.
A Mutex meghatározása
A kölcsönös kizárási objektumot rövid időre Mutex-nak nevezik. A kölcsönös kirekesztés fogalmából megérthetjük, hogy csak egy folyamat egyszerre férhet hozzá az adott erőforráshoz. A mutex objektum lehetővé teszi, hogy a többszörös programszálak ugyanazt az erőforrást használják, de egyszerre nem egyszerre.
Amikor egy program elindítja, kérje a rendszert, hogy hozzon létre egy mutex objektumot egy adott erőforráshoz. A rendszer létrehoz egy egyedi nevet vagy azonosítót tartalmazó mutex objektumot. Amikor a program szál használni akarja az erőforrást, amely lezárja a mutex objektumot, kihasználja az erőforrást, és használat után a mutex objektum zárját adja ki. Ezután a következő folyamat megszerzi a mutex objektum zárolását.
Eközben egy folyamat megszerezte a zárat a mutex objektumon, és más szál / folyamat nem fér hozzá az erőforráshoz. Ha a mutex objektum már zárolva van, a mutex objektum zárolásának megszerzését kívánó folyamatnak várnia kell, és a rendszer sorba állítja a mutex objektum feloldását.
A szemafor és a mutex közötti különbségek
- A szemafor egy jelzőmechanizmus, mint a várakozási () és a szignál () művelet, amely a szemafor változón keresztül történik, jelzi, hogy egy folyamat megszerzi-e az erőforrást vagy felszabadítja az erőforrást. Másrészt a mutex egy zárószerkezet, mivel az erőforrás megszerzéséhez a folyamatnak le kell zárnia az mutex objektumot, és az erőforrás-folyamat felszabadításakor fel kell oldania a mutex objektumot.
- A szemafor általában egy egész változó, míg a mutex egy objektum .
- A szemafor lehetővé teszi több programszál elérését az erőforrások véges példányához . Másrészről a Mutex lehetővé teszi, hogy több programszál egyetlen egyedi erőforráshoz férjen hozzá, de egyenként.
- A szemafor változó értéket bármely olyan folyamat módosíthatja, amely az erőforrást a várakozási () és a jel () művelet végrehajtásával szerezheti meg. Másrészről a mutex objektumon szerzett zár csak akkor oldható meg , ha a mutex objektum zárolását megszerezte.
- A szemafor kétféle szemaforból és bináris szemaforból áll, amely meglehetősen hasonlít a mutexhez.
- A szemafor változó értékét a várakozási () és a jel () művelet módosítja az inicializáláson kívül. Azonban az elnémító objektum zárolva van vagy feloldódik az erőforrás megszerzése vagy feloldása által.
- Ha az összes erőforrást a folyamat megszerzi, és nincs erőforrás szabad, akkor az erőforrást szerezni kívánó folyamat várakozási () műveletet hajt végre a szemafor változón, és blokkolja magát addig, amíg a szemafor száma nem lesz nagyobb, mint 0. De ha már van egy mutex objektum zárolt, majd az erőforrást megszerző folyamat várakozással és várakozással vár a rendszerben, amíg az erőforrás felszabadul és a mutex objektum kinyit.
Következtetés:
A szemafor jobb megoldás, ha több erőforrás áll rendelkezésre. Egyetlen közös erőforrás esetén a mutex jobb választás.