Cadenassez votre code grâce aux mutex.
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.
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).
Faire
Dim mut as Mutex = new Mutex(True)
Équivaut à faire
Dim mut as Mutex = new Mutex(False)
// tentative d'acquisition du mutex
mut.WaitOne()
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();
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 ».
« 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. »
Voilà 10 ans que je n'avais pas écrit un petit texte pour souhaiter un joyeux… Read More
Cela faisait un petit moment que je n'avais pas créé de billets sur ce blog.… Read More
Explorez l'importance des user stories dans la méthode Agile à travers une vidéo humoristique qui… Read More
Parce que, contrairement à ce que l'on pourrait penser ce soir qu'il pleut des cordes,… Read More
Un peu d’humour en attendant le résultat des élections présidentielles françaises. Read More
Si vous n'avez pas accès à l'interface graphique de votre Linux, vous pouvez modifier l'horloge… Read More
View Comments