2009-07-22 12 views
59

Eventuali duplicati:
What are the differences between various threading synchronization options in C#?Monitor vs Mutex in C#

Qual è la differenza tra un monitor e un mutex in C#?

Quando utilizzare un monitor e quando utilizzare un mutex in C#?

+0

http://stackoverflow.com/questions/301160/what-are-the-differences-between-various-threading-synchronization-options-in-c – joe

+0

Sono d'accordo con l'utilizzo del blocco per impostazione predefinita, ma è necessario chiamare Monitor.Enter/Exit se 1) è necessario un timeout o 2) se l'ambito di blocco non è limitato a un singolo metodo per qualche motivo. –

+0

Come nota aggiuntiva, i monitor forniscono quelle che vengono spesso chiamate "variabili condizionali" con i suoi metodi Wait/Pulse. Permette ad un thread di aspettare qualcosa finché un altro thread chiama Pulse sul monitor. – nos

risposta

14

Un mutex può essere condiviso tra più processi ed è molto più pesante di un monitor.

Utilizzare un monitor a meno che non sia necessario sincronizzare oltre i limiti del processo.

39

A Monitor è gestito e più leggero, ma limitato al numero AppDomain. A Mutex può essere assegnato un nome e possono estendersi processi (consentendo alcuni semplici scenari IPC tra le applicazioni) e possono essere utilizzati in codice che richiede un wait-handle).

Per gli scenari più semplici, Monitor (via lock) va bene.

16

Una buona fonte di informazioni su questa roba è "Threading in C#" di Joseph Albahari. Tutto il contenuto è disponibile online. A mio parere, vale la pena di leggere the whole book, ma yo può controllare queste parti:

Anche se non copre .NET 4.0 new parallel constructs, è un ottimo punto di partenza.

Aggiornamento: il libro è stato aggiornato. Ora, copre .NET 4.0 Parallel Programming nel suo part 5.