En général oui cela fonctionnera. Cependant, le diable est dans les détails.
Tout d'abord, vous voulez Fermer le mutex dans une enfin. Sinon votre processus pourrait se terminer brusquement et le laisser dans un signalé état (pensez à une exception). Qu'allait-il faire en sorte que les futures instances de processus ne serait pas en mesure de démarrer.
Malheureusement, même avec un bloc finally vous devez traiter avec le potentiel qu'un processus sera terminé sans libérer le mutex. Cela peut arriver par exemple si un utilisateur supprime le processus via le gestionnaire des tâches. Il est une condition de concurrence dans votre code, ce qui permettrait une deuxième processus pour obtenir un AbandonedMutexException dans le WaitOne appel. Vous aurez besoin d'un programme de rétablissement pour cette.
Je vous encourage à lire sur les détails de la classe Mutex. L'aide il n'est pas toujours simple
http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
MODIFIER l'Expansion de la race condition de possibilité
La séquence suivante d'événements peuvent se produire qui serait la cause d'une deuxième instance de l'application à lancer.
- Procédure Normale De Démarrage
- Deuxième Processus démarre et acquiert une poignée pour le mutex, mais est mis à l'écart avant la WaitOne appel
- Processus n ° 1 est brusquement interrompu. Le Mutex n'est pas détruit parce que le processus 2 a une poignée. C'est plutôt à un état d'abandon
- Deuxième processus commence à courir à nouveau et obtient un AbanonedMutexException