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

Mutex vs esemény

A C #-ban sok különféle menet-szinkronizálási lehetőség létezik. A két legszélesebb körben alkalmazott mutex és esemény. Csak mi a különbség a kettő között? Melyik a jobb megoldás?

Az esemény opció a szálak számára lehetőséget ad arra, hogy blokkolják az esemény közvetítését, tehát az „esemény” név. Ugyanaz, mint valamit aludni, és csak akkor felébreszteni, amikor valami jelentős esemény történik. Az események nem hasonlítanak a mutexekhez, mivel a mutexeknek nincs meg a jelző opció vagy a funkció. Az események képesek megtisztítani a jelet, ha felébresztették valaki, aki képes volt rá várni. Még az API-k is lehetővé teszik a blokkolás lehetőségét, amíg az események egyikét vagy mindegyikét nem jelzik. Ezen felül az események kernelobjektumok. A mutexekhez képest nem „könnyebb”. Az esemény alapvetően egy kernelobjektum, amelynek két állapota van. Általában egy esemény jelzi az esemény megérkezését, és néha az I / O művelet befejezését is.

A „Mutex” a kölcsönös kizárást jelenti. Ez a megosztott erőforrások széles körű koordinációs mechanizmusa. Gondolj rá mint egy tranzakció formájára. Nem köteles várni, bár néhány megosztott erőforrást szeretne elérni (csak abban az esetben, ha mások már hozzáférnek ehhez), amelyet blokkol. A mutex két államból áll, bár létezik a kölcsönös kizárás megvalósításához. Ez az az eset, amikor egy olyan kódszakaszt szeretne megvédeni, amely általában megosztja az erőforrásokat azon résztől, amelyben a mutex-et igénylik, azon a részen, amelyben kiadásra kerül. Ez ahhoz a tényhez vezet, hogy egyetlen szál sem halad át a szakaszon.

Azoknak az embereknek, akik megkíséreltek egy eseményt szimulálni egy mutex segítségével, szembe kellett nézniük azzal a problémával, hogy amint a zár megszerzése megtörtént, vagy az eseményről értesítést kaptak, a személy mindenki másját kitartja mindaddig, amíg a zár ki nem oldódik. Ez nem egy jelzett esemény szemantikája. Lehet, hogy egy esemény kiküldött marad, és mindenféle szálteszthez kapható lesz egy kapu, ha nincs zárak. A folyamatok közötti szinkronizálásra elkötelezett Mutex kernel módú objektumban van. Az egy módszer szerint a többszálú szinkronizáláshoz 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ényobjektumok sokkal könnyebbek. A felhasználói módú szinkronizálást a legtöbb helyzetben használják, mert kevesebb CPU-ciklust eredményez. A Mutex nagyon hasonló a kritikus szakaszhoz, és a megosztott erőforrásokhoz való hozzáférés szinkronizálására szolgál. Az eseményeknek teljesen más a funkciója, mert arra szolgálnak, hogy egyes emberek feladatokat szinkronizáljanak vagy a feladatok ütemezését kezeljék.

Az események inkább állapotváltozók, ellentétben a Mutex-kel, amely inkább a
monitorozhatja a terminológia néhány részében, vagy lehet a szemafor / mutex hagyományos formája.

Összefoglaló:

1.Az esemény opciója lehetővé teszi a szálak számára, hogy blokkolják az esemény sugárzását, azaz az esemény neve.

2.Az esemény alapvetően egy kernelobjektum, amelynek két állapota van. Általában egy esemény jelzi az esemény megérkezését, és néha az I / O művelet befejezését is.

3. A „Mutex” a kölcsönös kizárást jelenti. Ez a megosztott erőforrások széles körű koordinációs mechanizmusa.

4. A folyamatközi szinkronizálásra elkötelezett Mutex kernel módú objektumban van. Az egy módszer szerint a többszálú szinkronizáláshoz végrehajtott események felhasználói módú objektumban vannak.

5.Az események inkább egy feltételes változó, ellentétben a Mutex-rel, amely inkább egy
monitorozhatja a terminológia néhány részében, vagy lehet a szemafor / mutex hagyományos formája.