Diferența dintre Mutex și eveniment

Mutex vs Eveniment

În C #, există o mulțime de opțiuni diferite de sincronizare a firelor. 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 pentru eveniment este capabilă să ofere contractelor opțiunea de a bloca până când un eveniment este difuzat, astfel numele "eveniment". Este același lucru cu a pune ceva în somn și numai trezesc-l 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ții I / O.

"Mutex" înseamnă Excludere reciprocă. 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 este revendicat 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ă se confrunte cu problema în care, de îndată ce se blochează sau când evenimentul a fost semnalat, persoana îi ține pe ceilalți afară 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 procesoare. 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 mult o variabilă condiție, spre deosebire de Mutex, care este mai mult ca o
monitoriza în unele terminologie, sau poate fi o formă tradițională de semafor / mutex.

Rezumat:

1. Opțiunea evenimentului 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 având două stări. În mod normal, un eveniment semnalează venirea unui eveniment și uneori chiar sfârșitul unei operații 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 o
monitoriza în unele terminologie, sau poate fi o formă tradițională de semafor / mutex.