Mutex a událost

Anonim

Mutex vs. událost

V C # existuje spousta různých možností synchronizace závitů. Dvě častěji používané jsou mutex a událost. Co přesně je rozdíl mezi těmito dvěma? Která z nich je lepší?

Možnost události je schopna poskytnout vlákna možnost zablokovat, dokud se událost vysílá, a tak se pojmenuje "událost". Je to stejné jako ukládání něčeho do spánku a probouzení pouze tehdy, když se něco důležitého stane. Události jsou na rozdíl od mutexů, protože mutexy nemají signalizační funkci nebo funkci. Události mohou vymazat signál, jakmile se probudí někdo, kdo byl schopen na něj čekat. Dokonce i API mohou povolit možnost blokování, dokud nebude signalizována jedna nebo všechny různé události. Kromě toho jsou události jádrové objekty. Nejsou "lehčí" ve srovnání s mutexy. Událost je v podstatě jádrový objekt se dvěma stavy. Obvykle událost signalizuje příchod události a někdy dokonce i ukončení operace I / O.

"Mutex" znamená vzájemné vyloučení. Jedná se o formu koordinačního mechanismu pro zdroje, které jsou sdíleny. Mysli na to jako na formu transakce. Nejste povinni čekat, i když chcete přístup k několika sdíleným zdrojům (pouze v případě, že ji již ostatní uživatelé přistupují), které blokujete. Mutex se skládá ze dvou států, i když existují, aby zavedly vzájemné vyloučení. To je, když chcete chránit úsek kódu, který obvykle aktualizuje sdílený prostředek z části, ve které je nárokován mutex, na část, ve které bude uvolněn. To vede k tomu, že sekce nemůže procházet žádnou jinou nití.

Lidé, kteří se snažili simulovat událost pomocí mutexu, se museli setkat s problémem, v němž jakmile je zámek získán nebo událost byla signalizována, osoba drží všechny ostatní ven, dokud není uvolněn zámek. To není sémantika události, která je signalizována. Událost může zůstat odeslaná a pro všechny testy závitů bude k dispozici forma brány, pokud nebudou mít zámky. Mutex, který se zavázal k synchronizaci mezi procesy, je v objektu režimu jádra. Události provedené pro vícevláknovou synchronizaci v rámci jedné metody jsou v objektu uživatelského režimu.

Objekt Mutex je příliš těžký a příliš obecný. Objekty událostí jsou mnohem lehčí. Synchronizace uživatelského režimu se používá ve většině situací z důvodu, že poskytuje méně cyklů CPU. Mutex je velmi podobný kritické části a používá se k synchronizaci přístupu ke sdíleným zdrojům. Události mají úplně jinou funkci, protože se používají k synchronizaci úkolů nebo k řízení plánování úkolů u některých lidí.

Události jsou více proměnné podmínek, na rozdíl od Mutexu, který je spíše jako a sledovat v některé terminologii, nebo to může být tradiční forma semaforu / mutexu.

Souhrn:

1. Možnost události je schopna poskytnout vlákna možnost blokovat až do vysílání události, tedy název "událost".

2.Aktiva je v podstatě jádrový objekt se dvěma stavy. Obvykle událost signalizuje příchod události a někdy dokonce i ukončení operace I / O.

3. "Mutex" znamená vzájemné vyloučení. Jedná se o formu koordinačního mechanismu pro zdroje, které jsou sdíleny.

4.Mutex, který se zavázal synchronizaci mezi procesy, je v objektu režimu jádra. Události provedené pro vícevláknovou synchronizaci v rámci jedné metody jsou v objektu uživatelského režimu.

5.Events jsou více proměnné podmínky, na rozdíl od Mutexu, který je spíše jako a sledovat v některé terminologii, nebo to může být tradiční forma semaforu / mutexu.