Mutex vs Event
In C # ci sono molte diverse opzioni di sincronizzazione del threading. I due più ampiamente usati sono mutex ed event. Qual è esattamente la differenza tra questi due? Qual è l'opzione migliore?
L'opzione evento è in grado di dare ai thread l'opzione di bloccare fino a quando un evento viene trasmesso, quindi il nome "evento". È come mettere qualcosa a dormire e svegliarlo solo quando succede qualcosa di significativo. Gli eventi sono diversi dai mutex perché i mutex non hanno l'opzione o la funzione di segnalazione. Gli eventi sono in grado di cancellare il segnale una volta che qualcuno che è stato in grado di aspettare su di esso è stato svegliato. Anche le API sono in grado di consentire l'opzione di bloccare fino a quando uno o tutti i diversi eventi sono segnalati. Inoltre, gli eventi sono oggetti del kernel. Non sono "più leggeri" rispetto ai mutex. Un evento è fondamentalmente un oggetto del kernel con due stati. Normalmente, un evento segnala l'arrivo di un evento e talvolta anche la fine di un'operazione di I / O.
"Mutex" è l'acronimo di Mutual Exclusion. È una forma di meccanismo di coordinamento con scope per le risorse condivise. Pensala come una forma di transazione. Non sei obbligato ad aspettare sebbene tu voglia accedere ad alcune risorse condivise (solo nel caso in cui altri lo stiano già accedendo) che stai bloccando. Un mutex consiste di due stati sebbene esista per attuare una mutua esclusione. Questo è per quando si desidera proteggere un tratto di codice che di solito aggiorna una risorsa condivisa dalla parte in cui è rivendicato il mutex alla parte in cui verrà rilasciato. Questo porta al fatto che nessun altro thread può passare attraverso la sezione.
Le persone che hanno provato a simulare un evento con l'aiuto di un mutex hanno dovuto affrontare il problema in cui non appena viene acquisito il lucchetto o viene segnalato l'evento, la persona sta trattenendo tutti gli altri fino a quando il blocco non viene rilasciato. Questa non è la semantica di un evento che viene segnalato. Un evento può rimanere pubblicato e una forma di porta sarà disponibile per tutti i test di thread nell'evento che non ha alcun blocco. Il commit di mutex per la sincronizzazione dei processi è in oggetto in modalità kernel. Gli eventi creati per la sincronizzazione con multithreading in un unico metodo sono in oggetto in modalità utente.
L'oggetto Mutex è troppo pesante e troppo generico. Gli oggetti degli eventi sono molto più leggeri. La sincronizzazione in modalità utente viene utilizzata nella maggior parte delle situazioni a causa del minor numero di cicli della CPU. Mutex è molto simile a una sezione critica e viene utilizzato per sincronizzare l'accesso alle risorse condivise. Gli eventi hanno una funzione completamente diversa perché sono utilizzati per sincronizzare le attività o per la gestione della pianificazione delle attività per alcune persone.
Gli eventi sono più di una variabile di condizione, a differenza di Mutex, che è più simile a
monitorare in alcuni dei termini, o può essere una forma tradizionale di semaforo / mutex.
Sommario:
1.L'opzione evento è in grado di dare ai thread l'opzione di bloccare fino a quando non viene trasmesso un evento, quindi il nome "evento".
2. Un evento è fondamentalmente un oggetto kernel con due stati. Normalmente, un evento segnala l'arrivo di un evento e talvolta anche la fine di un'operazione di I / O.
3. "Mutex" è l'acronimo di Mutual Exclusion. È una forma di meccanismo di coordinamento con scope per le risorse condivise.
4.Mutex impegnato per la sincronizzazione dell'interprocesso è in oggetto in modalità kernel. Gli eventi creati per la sincronizzazione con multithreading in un unico metodo sono in oggetto in modalità utente.
5. Gli eventi sono più di una variabile di condizione, a differenza del Mutex, che è più simile a
monitorare in alcuni dei termini, o può essere una forma tradizionale di semaforo / mutex.