[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…
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 ».
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) »