Különbség a Mutex és az esemény között A különbség a

Anonim

Mutex vs Event

A C #-ben, nagyon sok különböző threading szinkronizálási lehetőség létezik. A két szélesebb körben használt mutex és esemény. Pontosan mi a különbség a kettő között? Melyik a jobb lehetőség?

Az esemény opció lehetővé teszi, hogy a szálak blokkolják az eseményt, amíg egy eseményt nem sugároznak, így az "esemény" nevet. "Ugyanaz, mint valami alvás, és csak ébredt fel, amikor valami jelentősége történik. Az események ellentétben állnak a mutexekkel, mert a mutexek nem rendelkeznek a jelző opcióval vagy funkcióval. Az események képesek a jelek tisztázására, ha valaki, aki képes volt rá várni, felkelt. Még az API-k is képesek engedélyezni a lehetőséget, hogy blokkolják, amíg a különböző események egyike vagy mindegyike jelzésre nem kerül. Ezenkívül az események a rendszermag objektumok. Ezek nem "könnyebbek" a mutexhez képest. Egy esemény alapvetően egy kernel objektum, amely két állapotot tartalmaz. Rendszerint egy esemény jelzi egy esemény megjelenését, és néha egy I / O művelet végét is.

"Mutex" a kölcsönös kizárás. Ez egyfajta kiterjedt koordinációs mechanizmus a megosztott erőforrások számára. Gondold át, mint egy tranzakció formáját. Önnek nem kell várnia, bár néhány megosztott erőforrást szeretne elérni (csak abban az esetben, ha mások már hozzáférnek hozzá), blokkolja. A mutex két államból áll, bár létezik a kölcsönös kizárás megvalósítása. Ez akkor van, amikor meg akarsz védeni egy olyan szakaszon, amely rendszerint frissíti a megosztott erőforrást attól a résztől, amelyen a mutex azt állítja, hogy az a része, amelyikben megjelenik. Ez azzal a ténnyel jár, hogy egyetlen szál sem halad át a szekcióban.

Azok a személyek, akik egy eseményt egy mutex segítségével próbáltak szimulálni, találkozniuk kellett azzal a problémával, hogy amikor a zárat megszerezték vagy az eseményt jelezték, a személy mindenkit megtart amíg a zár ki nem kerül. Ez nem az esemény szemantikája jelezve. Egy esemény fennmaradhat, és egy kapu formája lesz elérhető az összes menetvizsgálathoz abban az esetben, ha nincs zár. A szinkronizálás interoperábilis elkötelezettje a Mutex rendszermag-objektum. A többszálú szinkronizáláshoz egy módszerrel végrehajtott események felhasználói módú objektumban vannak.

A Mutex objektum túl nehéz és túl általános. Az esemény objektumok sokkal könnyebbek. A felhasználói módú szinkronizálást a legtöbb esetben azért használják, mert kevesebb CPU ciklust ad. A Mutex nagyon hasonlít egy kritikus szakaszhoz, és a megosztott erőforrásokhoz való hozzáférés szinkronizálására szolgál. Az események teljesen más funkcióval rendelkeznek, mivel a feladatok szinkronizálására vagy a feladat ütemezésének kezelésére használják egyes embereknek.

Az események inkább egy feltételváltozó, ellentétben a Mutexel, amely több mint egy

monitor a terminológia valamelyikében, vagy lehet egy hagyományos szemafor / mutex forma.

Összefoglaló:

1. Az esemény opció képes arra, hogy a szálakat blokkolja addig, amíg egy esemény nem sugároz, így az "esemény" név. „

2. Egy esemény alapvetően egy kernel objektum, amely két állapotot tartalmaz. Rendszerint egy esemény jelzi egy esemény megjelenését, és néha egy I / O művelet végét is.

3. A "Mutex" a kölcsönös kizárásról szól. Ez egyfajta kiterjedt koordinációs mechanizmus a megosztott erőforrások számára.

4. A szinkronizálás interoperábilis elkötelezettje a Mutex rendszermag-objektum. A többszálú szinkronizáláshoz egy módszerrel végrehajtott események felhasználói módú objektumban vannak.

5. Az események inkább egy feltételváltozó, ellentétben a Mutexel, amely több, mint egy

monitor a terminológia valamelyikében, vagy lehet egy hagyományos szemafor / mutex forma.