mercredi 22 décembre 2010

Assurer l'unicité d'un process

Certaines applications nécessitent qu'une seule instance à la fois soit exécutée sur une machine. Il existe sans doute d'autres stratégies pour réaliser cette unicité, mais une méthode assez simple consiste à utiliser un Mutex (Mutual Exclusion).

La classe Mutex du .NET framework se trouve dans le namespace System.Threading. Ce namespace contient d'autres composants tel que des sémaphores ou des moniteurs.

La technique consiste tenter de créer un mutex et d'essayer d'avoir le mutex. Si on arrive pas à l'avoir c'est qu'il est pris par un autre processus. Le mutex étant nommé, c'est qu'une autre instance de l'application est en train de s’exécuter.

La première exécution va créer le mutex et l'acquérir. Lorsque l'application se termine, elle relâche le mutex. Si on démarre simultanément plusieurs applications, la première obtiendra le mutex, les autres seront bloqués pendant 1000 ms lors de l'appel à la fonction WaitOne qui retournera faux car la première instance aura le mutex. Une fois l'application terminée, le mutex est relâché et une autre instance de l'application peut récupérer le mutex et s'exécuter.

Aucun commentaire:

Enregistrer un commentaire