Bonjour,
Dans une application pouvant être exécutée à plusieurs instances en même temps, je souhaiterai limiter l'exécution d'un traitement (clique sur bouton Valider) à un seul utilisateur au maximum en même temps.
à titre d'information, le traitement de la "section critique" en question concerne l'ajout d'enregistrement à un fichier et l'envoi de mail.
Pour cela, je compte utiliser une sorte de sémaphore de la manière suivante :
Je stocke dans un fichier un drapeau qui indique si la section critique est actuellement en cours d'exécution ou non.
Lorsque un utilisateur clique sur le bouton Valider, on teste d'abord la valeur du drapeau :
s'il est à 1 (ce qui signifie la Section critique est en cours d'exécution par un autre user), alors patienter et refaire le teste.
Sinon (Section Critique libre), on met l'indicateur à 1 (afin d'empêcher d'autres user d'y rentrer), on exécute le traitement puis on remet l'indicateur à 0 pour libérer la section critique :
En gros le code ressemble à quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Drapeau = LireDrapeau() // Lire le contenu du fichier et mettre l'indicateur dans la variable drapeau TANTQUE nDrapeau=1 Temporisation(100); Drapeau = LireDrapeau(); // Lire le contenu du fichier et mettre l'indicateur dans la variable drapeau FIN //Section Critique Libre Drapeau = 1; // bloquer la section critique EcrireDrapeau(); // Ecrire le contenu de la variable dans le fichier //DEBUT SECTION CRITIQUE ... //FIN SECTION CRITIQUE Drapeau=0; EcrireDrapeau();//Remettre l'indicateur à 0.
Théoriquement, cela doit fonctionner, mais en pratique (Windev). Est-ce que cette méthode peut poser problème dans certains cas??
L'utilisation des Sémaphores permet justement de palier à ce problème, mais j'ai cru comprendre que cela concerne les spécialement threads alors que dans mon cas il s'agit d'un programme exécuté à plusieurs instances en même temps.
Partager