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#?
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#?
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.
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.
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:
On Mutex.
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.
http://stackoverflow.com/questions/301160/what-are-the-differences-between-various-threading-synchronization-options-in-c – joe
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. –
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