Cadenassez votre code grâce aux mutex.

[C#]A quoi sert le booléen du constructeur Mutex(Boolean)

D’après MSDN le constructeur Mutex(boolean), je cite : « Mutex(Boolean) : Initialise une nouvelle instance de la classe Mutex avec une valeur Boolean qui indique si le thread appelant doit avoir la propriété initiale du mutex. »
Bon, quand on sait de quoi on parle, cette définition du constructeur est simple.
Sinon on risque de ne pas savoir ce qu’est la propriété initiale du mutex…



Cadenassez votre code grâce aux mutex.
Cadenassez votre code grâce aux mutex.

Pas de panique, en fait bien que la définition soit au premier à bord obscure, la notion cachée derrière elle est beaucoup plus simple.

Explication de Mutex(boolean)

Lorsque vous allez créer une nouvelle instance de votre Mutex via le constructeur Mutex(boolean), vous allez pouvoir dire si le thread qui vient de créer votre Mutex en est le propriétaire ou non.

En fait, lorsque vous créez votre Mutex, celui-ci peut être utilisé par n’importe quel processus.
Le thread réservant le mutex sera donc le propriétaire de ce mutex (il en aura donc la propriété, les autres ne pourront qu’attendre leur tour.).
Du coup, un thread B peut très bien avoir « capturé » le mutex juste après sa création par le thread A.
Si vous ne voulez pas que cela se produise, il vous suffit d’indiquer au constructeur que le mutex est réservé par le thread A (c’est à dire par le thread qui vient de créer le mutex) grâce au booléen à true du constructeur.
Le thread A sera alors le propriétaire initial du mutex.
Inversement, si vous préférez laisser le système choisir qui doit obtenir le verrou sur le mutex alors il suffit de passer false au constructeur de votre mutex.

Pour information, le constructeur Mutex(), en fait, initialise par défaut à False la valeur de propriété initiale du mutex.
Utiliser Mutex() revient à faire Mutex(False).

Exemple d’utilisation du mutex(bool)

En VB

Faire

Dim mut as Mutex = new Mutex(True)

Équivaut à faire

Dim mut as Mutex = new Mutex(False)
// tentative d'acquisition du mutex
mut.WaitOne()

En c#

Mutex mut = new Mutex(true);

Equivaut à faire

Mutex mut = new Mutex(false);
// On attend jusqu'a se que l'on ai le droit d'entrer dans la partie du code protégé.
mut.WaitOne();

Ou équivaut à faire

Mutex mut = new Mutex();
// Wait until it is safe to enter
mut.WaitOne();

Définition

Au fait, savez vous ce que signifie le mot ‘Mutex‘?
En fait, mutex est une abbréavition qui signifie :
« MUTual EXclusion lock »
Ce qui pourrait être traduit par :
« Verrou d’exclusion mutuelle ».

Schéma de gestion des mutex
Schéma de gestion des mutex


Pour aller plus loin avec les mutex:
Vous serez peut être intéressez par les articles suivants :
Mes sources:
Pour rappel:

« Lorsque deux ou plusieurs threads doivent accéder à une ressource partagée en même temps, le système a besoin d’un mécanisme de synchronisation pour garantir qu’un seul thread à la fois utilise cette ressource. Mutex est une primitive de synchronisation qui accorde à un seul thread un accès exclusif à la ressource partagée. Si un thread acquiert un mutex, l’autre thread qui veut acquérir ce mutex est interrompu jusqu’à ce que le premier thread libère le mutex. »


3 commentaires sur « [C#]A quoi sert le booléen du constructeur Mutex(Boolean) »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.