Szemafor vs Mutex
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 Mutex-et (kölcsönös kizárási objektum) arra is használják, hogy több párhuzamos folyamat egyidejűleg elkerülje a hozzáférést egy közös erőforráshoz..
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 a Mutex??
Amikor elindul egy számítógépes alkalmazás, létrehoz egy mutexet, és csatolja azt egy erőforráshoz. Ha az erőforrást egy szál használja, akkor zárolva van, és más szálak nem tudják használni. Ha egy másik szál ugyanazt az erőforrást akarja használni, kérést kell készítenie. A szálat ezután sorba helyezzük, amíg az első szál az erőforrással befejeződik. Amikor az első szál az erőforrással befejeződik, a zár eltávolításra kerül, és a sorban váró szál hozzáférhet az erőforráshoz. Ha több szál vár a sorban, akkor hozzáférést kapnak forgó alapon. Gyakorlatilag, amikor a mutex több szál között váltakozik az erőforráshoz való hozzáféréssel, akkor ez látható lesz, mivel több szál egyidejűleg egy erőforrást fogyaszt. De belsőleg csak egyetlen szál fér hozzá az erőforráshoz egy adott időben.
Mi a különbség a Semaphore és a Mutex között??
Annak ellenére, hogy mind a szemaforákat, mind a mutex objektumokat használják a kölcsönös kizárás elérésére párhuzamos programozási környezetekben, vannak eltérések. A mutex objektum csak egyetlen szál számára teszi lehetővé az erőforrás vagy a kritikus szakasz felhasználását, míg a szemaforok korlátozott számú egyidejű hozzáférést tesznek lehetővé egy erőforráshoz (a maximálisan megengedett szám alatt). A mutex objektumokkal az erőforráshoz hozzáférni kívánó többi szálaknak várniuk kell egy sorban, amíg az aktuális szál az erőforrás felhasználásával befejeződik.