Diferența dintre Mutex și eveniment Diferența dintre

Anonim

Mutex vs Event

În C #, există o mulțime de opțiuni de sincronizare a filetelor diferite. Cele două mai utilizate pe scară largă sunt mutexul și evenimentul. Doar exact ce este diferența dintre aceste două? Care dintre ele este o opțiune mai bună?

Opțiunea evenimentului este capabilă să ofere contururilor opțiunea de blocare până când un eveniment este difuzat, astfel numele "eveniment. "Este același lucru cu a pune ceva în somn și a trezi doar când se întâmplă ceva de importanță. Evenimentele sunt diferite de mutexuri, deoarece mutexurile nu au opțiunea sau funcția de semnalizare. Evenimentele pot șterge semnalul odată ce a fost trezit cineva care a putut să aștepte. Chiar și API-urile pot permite opțiunea de blocare până când unul sau toate evenimentele sunt semnalizate. În plus, evenimentele sunt obiecte kernel. Ele nu sunt "mai ușoare" decât mutexurile. Un eveniment este în esență un obiect kernel care are două stări. În mod normal, un eveniment semnalează venirea unui eveniment și uneori chiar sfârșitul unei operațiuni I / O.

"Mutex" înseamnă Excludere mutuală. Este o formă de mecanism de coordonare bazat pe resursele care sunt partajate. Gândiți-vă la aceasta ca la o formă de tranzacție. Nu sunteți obligat să așteptați, deși doriți să accesați câteva resurse partajate (numai în cazul în care alții îl accesează deja) pe care îl blocați. Un mutex constă din două state, deși există pentru a pune în aplicare o excludere reciprocă. Aceasta este pentru atunci când doriți să protejați o porțiune de cod care actualizează, de obicei, o resursă partajată din partea în care se revendică mutex-ul la partea în care va fi lansată. Acest lucru duce la faptul că nici un alt fir nu poate trece prin secțiune.

Oamenii care au încercat să simuleze un eveniment cu ajutorul unui mutex au trebuit să întâlnească problema în care, imediat ce a fost dobândită sau dacă evenimentul a fost semnalat, persoana îi ține pe toți ceilalți până când blocajul este eliberat. Aceasta nu este semnalarea unui eveniment semnalat. Un eveniment poate să rămână afișat și o formă de poarta va fi disponibilă pentru toate testele de fir în cazul în care nu are nici o încuietori. Mutex-ul dedicat sincronizării interproceselor se află în obiectul kernel-mode. Evenimentele realizate pentru sincronizarea cu mai multe fire în cadrul uneia dintre metode sunt în obiect de utilizator.

Obiectul Mutex este prea greu și prea general. Obiectele de eveniment sunt mult mai ușoare. Sincronizarea cu modurile de utilizare este utilizată în majoritatea situațiilor datorită faptului că oferă mai puține cicluri de procesor. Mutex este foarte mult ca o secțiune critică și este folosit pentru a sincroniza accesul la resursele care sunt partajate. Evenimentele au o funcție total diferită deoarece sunt folosite pentru sincronizarea sarcinilor sau pentru gestionarea programării sarcinilor pentru unii oameni.

Evenimentele sunt mai degrabă o variabilă de condiție, spre deosebire de Mutex, care este mai mult ca un monitor

în unele terminologii, sau poate fi o formă tradițională de semaphore / mutex.

Rezumat:

1. Opțiunea pentru eveniment este capabilă să ofere contractelor opțiunea de blocare până la difuzarea unui eveniment, astfel numele "eveniment. „

2. Un eveniment este în esență un obiect kernel care are două stări. În mod normal, un eveniment semnalează venirea unui eveniment și uneori chiar sfârșitul unei operațiuni I / O.

3. "Mutex" înseamnă Excludere reciprocă. Este o formă de mecanism de coordonare bazat pe resursele care sunt partajate.

4. Mutex-ul dedicat sincronizării interproceselor se află în obiectul kernel-mode. Evenimentele realizate pentru sincronizarea cu mai multe fire în cadrul uneia dintre metode sunt în obiect de utilizator.

5. Evenimentele sunt mai mult o variabilă condiție, spre deosebire de Mutex, care este mai mult ca un monitor

în unele terminologii, sau poate fi o formă tradițională de semaphore / mutex.