2009-07-22 5 views
59

Possible en double:
What are the differences between various threading synchronization options in C#?Moniteur vs Mutex en C#

Quelle est la différence entre un moniteur et un Mutex en C#? Quand utiliser un moniteur et quand utiliser un Mutex en C#?

+0

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

+0

Je suis d'accord avec l'utilisation du verrouillage par défaut, mais vous devez appeler Monitor.Enter/Exit si 1) un timeout est nécessaire ou 2) si la portée de verrouillage n'est pas limitée à une seule méthode pour une raison quelconque. –

+0

Comme note ajoutée, les moniteurs fournissent ce que l'on appelle souvent des "variables de condition" avec ses méthodes Wait/Pulse. Cela permet à un thread d'attendre quelque chose jusqu'à ce qu'un autre thread appelle Pulse sur le moniteur. – nos

Répondre

14

Un mutex peut être partagé entre plusieurs processus et est beaucoup plus lourd qu'un moniteur.

Utilisez un moniteur sauf si vous avez besoin de synchroniser entre les limites de processus.

39

Un Monitor est géré, et plus léger - mais est limité à votre AppDomain. Un Mutex peut être nommé, et peut s'étendre sur des processus (en autorisant quelques scénarios IPC simples entre des applications), et peut être utilisé dans du code qui nécessite un wait-handle).

Pour la plupart des scénarios simples, Monitor (via lock) est correct.

16

Une bonne source de conseils sur ce genre de choses est le "Threading in C#" de Joseph Albahari. Tout le contenu est disponible en ligne. À mon avis, il vaut la peine de lire the whole book, mais yo peut vérifier ces parties:

Bien qu'il ne couvre pas .NET 4.0 new parallel constructs, c'est un très bon point de départ.

Mise à jour: Le livre a été mis à jour. Maintenant, il couvre .NET 4.0 Parallel Programming dans son part 5.