Java - mi mutexek és a szemafor a java, mi a fő különbség

Szemafor lehet számítani, míg a mutexet csak támaszkodni a 1.

Tegyük fel, hogy van egy szál, amely fogadja a kapcsolatokat az ügyfél. Ezt az áramot egyszerre kezelni 10 ügyfelek. Ezután minden új ügyfél határozza meg a szemafor, amíg eléri a 10. Ha Szemafor 10 zászlók, a patak nem fogad el új kapcsolatokat







Mutex általában védelmére használják a dolgokat. Tegyük fel, hogy a 10 ügyfelek kaphatnak hozzáférést több részei a rendszernek. Akkor védelme része a rendszer mutexek, így ha egy kliens csatlakozik ez az alrendszer, senki más számára hozzáférést kell biztosítani. Erre a célra, akkor is használhatja a szemafor. Mutex - ez a „kölcsönös szemafor.”

Sajnos, minden kimaradt legfontosabb különbség mutexek és a szemafor; A „tulajdon” fogalma.

Szemaforokat nincs fogalma a tulajdon, ami azt jelenti, hogy minden szál kiadja a szemafor (ez ahhoz vezethet, hogy sok probléma önmagában, de ez segíthet a „felfedezés a halál”). Bár van mutexek tulajdon fogalmába (vagyis ha csak engedje el a mutex megvásárolt).
Az ingatlan rendkívül fontos a biztonsági programozás párhuzamos rendszereket. Mindig ajánlom mutexek használatával, szemafor inkább (de vannak következményei teljesítmény).

Mutexes is támogatja a prioritás öröklés (ami segíthet megoldani a problémát a prioritás inverzió) és a rekurzió (kivéve az egyik típusú biztosítóberendezés).

Azt is meg kell jegyezni, hogy vannak „bináris” szemafor és a „számláló / általános” szemaforokat. Java egy számlálási szemafor szemafor, és így lehetővé teszi annak inicializálva egy egynél nagyobb érték (míg, amint jeleztük, mutex lehet csak egy fogalmi jelentéssel). Ennek haszna rámutatott, hogy a más pozíciókban.

Tehát, összefoglalni, ha nem több erőforrást kell kezelni, mindig ajánlom a szemafor mutex.

Mutex - ez alapvetően a kölcsönös kizárási. Csak egy szál kap az erőforrás azonnal. Amikor az egyik szál lesz a forrás, nincs más téma nem hagytuk, hogy felvegye az erőforrást, amíg a szál, hogy birtokolja a forrás nem válik szabaddá. Az összes szál vár megszerzése az erőforrás le lesz tiltva.

Szemaforhoz használják, hogy ellenőrizzék a szálak számának. Rögzített erőforrás kerül telepítésre. Resources pontszám csökkenni fog minden egyes alkalommal, amikor a menet tulajdonosa ugyanaz. Ha a szemafor száma eléri a 0, nincs másik szál is kap az erőforrás. Szálak vannak tiltva, amíg a másik szál nem lesz a források.

Röviden, a fő különbség abban rejlik, hogy hány szálat akár azonnal megszerezni a forrás?







  • Mutex - van ilyen.
  • Szemafor - ez DEFINED_COUNT, (mint a több szemaforokkal)

A mutexeket használt szekvenciális hozzáférést egy erőforrás, míg a szemafor korlátozza a hozzáférést, hogy az erőforrás egy előre meghatározott számot. Azt lehet gondolni, mint mutexek szemafor a hozzáférési szám 1. Nem számít, mit beállítani a szemafor e patakok az erőforrás elérését megelőzően az erőforrás van zárva.

Feabhas válasz nagyon fontos - a mutex ellenőrzések szál próbál felszabadítani mutexek valójában saját maga is. Megcsináltam ügyként az interjú, így meg kell próbálni, hogy emlékezzen rá.

Szemafor Object végrehajtja a szinkronizálást klasszikus fény. Forgalmi szabályozza a hozzáférést az erőforrás, közös számláló. Ha a számláló értéke nullánál nagyobb, hozzáférhetnek; Ha az érték nulla, a hozzáférés megtagadva. A számláló az engedély lehetővé teszi a hozzáférést egy közös erőforrás. Aztán, hogy az erőforrás elérését áramlását meg kell kapnia a közlekedési lámpa. Általában a forgalmi folyam, amely azt akarja, hogy a hozzáférés egy megosztott erőforrás, megpróbál engedélyt. Ha az összeg a forgalom nagyobb, mint nulla, a szál kap engedélyt, és az összeget a forgalom csökken. Ellenkező esetben a szál blokkolva, ameddig ő nem kap engedélyt. Ha egy szál már nem kell a hozzáférést egy közös forrás, akkor szabaddá teszi a felbontás, így a forgalom értékét növeli. Ha van egy másik szál vár engedélyt, ő kap engedélyt abban az időben. Semaforsky Java osztály megvalósítja ezt a mechanizmust.

Szemafor két kollektor:

num azt a kezdeti ráfordítás az állásfoglalás. Ezután num jelzi folyamok száma, amelyek hozzáférhetnek a megosztott erőforrás egy adott időpontban. Ha num egyenlő egy, akkor egyszerre hozzáférni egy erőforrást egy szálat. Miután megállapítottuk, hogy hogyan vált valóra, akkor arról, hogy a flow, amit elvár, hagyjuk a sorrendben, amelyben kérik.

Counting szemafor. Fogalmi, egy szemafor állítja egy sor megengedi. Mindegyik szert () blokkok, ha szükséges, előzetes engedélyt, majd elveszi azt. Minden release () egészíti ki az engedélyt, potenciálisan felszabadító blokkoló vevő. Azonban a tényleges engedély tárgyakat használnak; Szemafor egyszerűen megszámlálja a rendelkezésre álló és megfelelően jár el.

Szemaforok gyakran használják, hogy korlátozzák a szálak száma, mint a hozzáférést bizonyos (fizikai vagy logikai) erőforrás

Java nincs beépített API Mutex. De lehet végrehajtani, mint a bináris szemafor.

Szemafor inicializált egyet, és amelyet oly módon, hogy nem több, mint egy engedély rendelkezésre áll, szolgálhat zár kölcsönös kizárás. Ez több ismert bináris szemafor, mert csak két állapota: több engedély rendelkezésre áll, vagy nulla engedélyek rendelkezésre állnak.

Ha ilyen módon használni, hogy az a tulajdonsága, bináris szemafor (ellentétben sok zárak implementáció), amely a „LOCK” lehet kiadni közvetítés nem a tulajdonos (mint a szemafor tulajdonosi koncepció). Ez hasznos lehet bizonyos speciális helyzetekben, mint például a helyreállítás a patthelyzet.

Tehát a legfontosabb különbség szemafor és mutexek:

Szemafor korlátozza a patakok forrásokhoz való hozzáférés. Mutex egyszerre csak egy szál az erőforrás elérését.

Egyik ilyen nem beszél Szemafor. Témák frissítheti az engedélyek számát hívja módszerekkel szereznek () és a release (). Mutexes kell oldani csak a menet tartja a zárat.

Amikor a mutexeket használható állapotban változók, van egy hallgatólagos sorozat - világos, hogy a védett része a program d. Ez nem feltétlenül vonatkozik a szemafor, amelyek úgynevezett menni a párhuzamos programozás - egy erőteljes, mégis nagyon könnyen használható strukturálatlan, homályos módon.




Kapcsolódó cikkek