PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Thread : Protection ?
Thread : Protection ?
Débuté par Jean-Michel, 12 oct. 2015 06:34 - 3 réponses
Membre enregistré
856 messages
Posté le 12 octobre 2015 - 06:34
Bonjour,
En lisant les nouveautés de la version 21, je tombe la dessus :





De quelle protection ?
Mes variables en Thread secondaire doivent être protégées de quoi ??? Et comment ???

--
Synchronize Systems International LTD
Développement d'outils de gestion

Environnements AS400 – Windows
Langages GAP III – CL – Visual Basic - Visual Adélia - Adélia - Windev
http://www.cashpower.fr/

Bangkok / Pattaya
Posté le 12 octobre 2015 - 09:43
Jean-Michel a écrit :
Bonjour,
En lisant les nouveautés de la version 21, je tombe la dessus :





De quelle protection ?
Mes variables en Thread secondaire doivent être protégées de quoi ??? Et
comment ???


voir sectioncritique

--
Cordialement JeAn-PhI
Posté le 12 octobre 2015 - 14:15
Bonjour,

lorsque des variables globales ou des objets dynamiques sont utilisés dans une ou plusieurs procédures qui sont utilisées par plusieurs threads, il faut protéger l'accès au variable.

par exemple, on a deux procédures et deux thread pour gérer une division.

DiviseurGlobal est un entier // Variable globale
ResultatDivision est un entier // Variable globale

Procedure ModifierDiviseur(pDiviseur est un entier)
DiviseurGlobal = pDiviseur

Procedure Diviser(pNombre est un entier)
SI DiviseurGlobal <> 0 ALORS // Ligne 1
ResultatDivision = pNombre / DiviseurGlobal // Ligne 2
FIN


Le thread 1 se charge d'appeler ModifierDiviseur en boucle et le thread2 se charge d'appeler Diviser en boucle. De temps à autre, le thread1 appelle ModifierDiviseur avec zero en paramètre.

Avec une gestion des sections critiques, tout devrait bien se passer.
Mais sans, il est possible que la valeur de DiviseurGlobal change en plein milieu du traitement Diviser, car Thread1 l'aura appelé. Et si Thread1 appelle ModifierDiviseur(0) en plein milieu de Diviser, on aura une division par zéro et donc un plantage.

C'est une simplification du pourquoi des sections critiques (ou sémaphore), mais c'est une notion à bien prendre en compte lors de l'utilisation de thread.
Membre enregistré
148 messages
Posté le 12 octobre 2015 - 15:55
Bonjour

La deuxième thread ne pourra jamais exécuter un code en même temps que la première threads est en cours d'exécution

Bon dev

--
FETOUI MOHAMED
Consultant et Formateur
fib.fetouimed@gmail.com
https://www.linkedin.com/pub/mohamed-el-fetoui/a0/680/109
MAROC+212(0)661249774