Mutex vs Semaphore – Különbség köztük
Főbb különbség a Mutex és a Semaphore
- A Mutex egy zárszerkezet, míg Semaphore egy jelzőmechanizmus
- A Mutex csak egy tárgy Semaphore egy egész szám
- A Mutexnek nincs altípusa, míg a szemafornak két típusa van: a számláló szemafor és a bináris szemafor.
- Semaphore támogatja a várakozási és jelzési műveletek módosítását, míg a Mutexet csak az erőforrást kérő vagy felszabadító folyamat módosítja.
- Semaphore Az érték módosítása a várakozás () és a signal () műveletekkel történik, másrészt a Mutex műveletek zárolása vagy feloldása történik.

Itt elemeztem a különbséget a Mutex és a Semaphore és átfogóan értékelni fogja előnyeiket és hátrányaikat.
Gyakori tények a Mutexről és Semaphore
Gyakorlatomból levonva íme néhány gyakori tény a Mutex vs Semaphore:
- Csak egy feladat szerezheti meg a mutexet. Így a mutex tulajdonjoggal rendelkezik, és csak a tulajdonos engedheti el.
- A mutex és a szemafor használatának okai eltérőek, talán a megvalósításuk hasonlósága miatt, a mutexet bináris szemafornak nevezik.
- Az egyik nagyon ismert tévhit az, hogy a Mutexes és Semaphores majdnem azonos, azzal az egyetlen különbséggel, hogy a Mutex képes 1-ig számolni, míg Semaphoreképes 0-tól N-ig számolni.
- Mindig van bizonytalanság a bináris szemafor és a mutex között. Hallhatja, hogy a mutex egy bináris szemafor, ami nem helyes.
Mi az a Semaphore?
Egy szemafor Egyszerűen egy változó, amely nem negatív és megosztva a szálak között. A szemafor egy jelzőmechanizmus, és a szemaforon várakozó szálat egy másik szál jelezheti. Két atomi műveletet használ, 1) várakozást és 2) jelet a folyamat szinkronizálás.
A szemafor vagy engedélyezi vagy letiltja az erőforráshoz való hozzáférést, ami a beállítás módjától függ.
Használata Semaphore
Egyetlen puffer esetén a 4 KB-os puffert négy 1 KB-os pufferre választhatjuk szét. Semaphore társítható ehhez a négy pufferhez. Ez lehetővé teszi a felhasználóknak és a gyártóknak, hogy egyidejűleg különböző puffereken dolgozzanak.
Előnyei Semaphore
Gyakorlatomban itt vannak a szemafor használatának legfontosabb pozitívumai:
- Lehetővé teszi, hogy egynél több szál hozzáférjen a kritikus részhez
- Semaphores gépfüggetlenek.
- Semaphores a mikrokernel gépfüggetlen kódjában vannak megvalósítva.
- Nem teszik lehetővé több folyamat belépését a kritikus szakaszba.
- Mivel a szemaforban elfoglalt várakozási idő van, soha nem kell a folyamatidőt és az erőforrásokat pazarolni.
- Gépfüggetlenek, amelyeket a mikrokernel gépfüggetlen kódjában kell futtatni.
- Lehetővé teszik az erőforrások rugalmas kezelését.
Hátrányai Semaphores
Itt vannak a szemafor hátrányai, amelyekkel találkoztam.
- A szemafor egyik legnagyobb korlátja az elsőbbségi inverzió.
- Az operációs rendszernek nyomon kell követnie minden hívást a várakozáshoz és a szemafor jelzéséhez.
- Használatukat soha nem kényszerítik ki, de csak megállapodás alapján.
- A szemafor holtpontjainak elkerülése érdekében a Várj és Signal a műveleteket a megfelelő sorrendben kell végrehajtani.
- Semaphore a programozás egy összetett módszer, így van esély arra, hogy ne érjük el a kölcsönös kizárást.
- Szintén nem praktikus módszer nagyüzemi használatra, mivel használatuk a modularitás elvesztéséhez vezet.
- Semaphore hajlamosabb a programozói hibákra.
- Előfordulhat holtpont vagy a kölcsönös kizárás megsértése programozói hiba miatt.
Mi az a Mutex?
A Mutex teljes formája a Mutual Exclusion Object. Ez egy speciális típusú bináris szemafor, amely a megosztott erőforráshoz való hozzáférés szabályozására szolgál. Tartalmaz egy prioritás öröklődési mechanizmust a kiterjesztett prioritás-inverziós problémák elkerülése érdekében. Lehetővé teszi, hogy az aktuális magasabb prioritású feladatokat a lehető legrövidebb ideig blokkolt állapotban tartsák. A prioritási öröklődés azonban nem korrigálja a prioritás-inverziót, hanem csak minimalizálja annak hatását.
Mutex használata
A mutex kölcsönös kizárást biztosít, amely lehet termelő vagy fogyasztó, aki birtokában van a kulcsnak (mutex) és folytathatja munkáját. Amíg a gyártó tölti a puffert, a felhasználónak várnia kell, és fordítva. A Mutex zárban mindig csak egy szál tud működni a teljes pufferrel.
A Mutex előnyei
A megfigyelések alapján a Mutex legfontosabb előnyei:
- A mutexek csak egyszerű zárak, amelyeket a kritikus szakaszba való belépés, majd az elengedés előtt szereznek be.
- Mivel egy adott időpontban csak egy szál van a kritikus szakaszában, nincsenek versenyfeltételek, és az adatok mindig konzisztensek maradnak.
A Mutex hátrányai
A gyakorlatom során a Mutex számos hátrányát azonosítottam.
- Ha egy szál zárolást kap, és alvó állapotba kerül, vagy megelőzi, akkor előfordulhat, hogy a másik szál nem tud előrelépni. Ez éhezéshez vezethet.
- Nem zárolható vagy oldható fel más kontextusból, mint amelyik megszerezte.
- Egyszerre csak egy szál engedélyezhető a kritikus szakaszban.
- A normál megvalósítás foglalt várakozási állapothoz vezethet, ami CPU-időt veszít.
A különbség köztük Semaphore és Mutex
A velük való munka során tanultak alapján a Mutexes és a Semaphorekülönböznek:
paraméterek | Semaphore | mutexek |
---|---|---|
Szerkezet | Ez egyfajta jelzőmechanizmus. | Ez egy zárszerkezet. |
Adattípus | Semaphore egy egész változó. | A Mutex csak egy tárgy. |
Módosítás | A várakozás és jelzés műveletek módosíthatják a szemafort. | Csak az erőforrást kérő vagy felszabadító folyamat módosítja. |
Erőforrás menedzsment | Ha nincs szabad erőforrás, akkor a folyamathoz olyan erőforrásra van szükség, amelynek végre kell hajtania a várakozási műveletet. Meg kell várnia, amíg a szemaforok száma nagyobb, mint 0. | Ha zárolva van, a folyamatnak várnia kell. A folyamatot sorban kell tartani. Ezt csak akkor kell elérni, ha a mutex fel van oldva. |
Szál | Több programszál is lehet. | Több programszál is lehet a mutexben, de nem egyszerre. |
Tulajdon | Az értéket bármely, az erőforrást felszabadító vagy megszerző folyamat megváltoztathatja. | Az objektumzárat csak az a folyamat oldja fel, amelyik megkapta a zárolást. |
Típusai | Típusok Semaphore szemafort és bináris szemafort számol. | A Mutexnek nincsenek altípusai. |
OperaCIÓ | Semaphore az érték módosítása a várakozás () és a jel () művelettel történik. | A Mutex objektum zárolva van vagy fel van oldva. |
Erőforrások Foglaltság | Lefoglalt, ha minden erőforrás használatban van, és az erőforrást kérő folyamat várakozási () műveletet hajt végre, és blokkolja magát, amíg a szemaforok száma >1 lesz. | Abban az esetben, ha az objektum már zárolva van, az erőforrásokat kérő folyamat vár, és sorba állítja a rendszer a zárolás feloldása előtt. |
Következtetés
Tapasztalataim szerint a mutexek és a szemaforok közötti választás kulcsa a működési árnyalatok felismerése. Semaphores ideálisak összetett szinkronizáláshoz, míg a mutexek az egyszerű kölcsönös kizárásokhoz alkalmasak, biztosítva az erőforrások biztonságát egyszerűbb összefüggésekben.