2010-09-16 14 views
7

Perché abbiamo bisogno di mutex ed eventi in Windows? Nel senso che Windows non ha solo Mutex? Cosa si può fare con Eventi che non possono essere fatti con Mutex?Mutex ed eventi su Windows

risposta

9

Gli eventi consentono di bloccare i thread finché non viene trasmesso un evento (da cui il nome). Bloccare su un evento significa "Svegliami quando qualcosa è successo"; ti aspetti di essere addormentato. Gli eventi sono un meccanismo di segnalazione e forniscono supporto per ciò che non si trova sui mutex, come la possibilità di cancellare automaticamente il segnale non appena qualcuno che lo ha aspettato si è svegliato. Inoltre, l'API consente il blocco fino a uno di o tutti di diversi eventi sono segnalati.

Il mutex (Mutual Exclusion), d'altra parte, è un meccanismo di coordinamento per le risorse condivise. Pensa alla transazione. Non ti aspetti di aspettare ma vuoi accedere ad alcune risorse condivise, e solo nel caso in cui altri lo stiano già accedendo, stai bloccando.

Se si è tentato di simulare un evento utilizzando un mutex, si dovrebbe affrontare il problema che non appena si acquisisce il blocco (quando si intende "evento segnalato"), si tengono fuori tutti gli altri fino a quando non lo si rilascia serratura. Questa non è la semantica della segnalazione di un evento; potrebbe rimanere pubblicato e le "porte" rimarranno aperte per ogni thread test per l'evento, senza acquisire alcun blocco.

+0

"è un meccanismo di coordinamento ambito per le risorse condivise. Pensare transazione" ... hai scritto [questo] (http://www.differencebetween.net/miscellaneous/difference-between-mutex-and-event/) come bene? –

1

Mutex dedicato per la sincronizzazione dei processi. Questo è l'oggetto in modalità kernel. Eventi per la sincronizzazione multithread in un unico processo. Questo è un oggetto in modalità utente.

oggetto mutex è molto generale e pesante, d'altra mano oggetto Event è molto più leggero. Nella maggior parte delle situazioni è necessario utilizzare la sincronizzazione in modalità utente, poiché fornisce meno cicli della CPU.

+0

Opps (mancato ... – yozhik