Condition de concurrence
Une condition de concurrence se produit lorsqu’un programme dépend du moment où un ou plusieurs processus s’exécutent pour fonctionner correctement. Si un thread s’exécute ou se termine à un moment inattendu, cela peut entraîner un comportement imprévisible, comme une sortie incorrecte ou un blocage du programme.
La plupart des logiciels sont multithreads, ce qui signifie qu’ils peuvent traiter plusieurs threads à la fois. Une application bien programmée veille à ce que les résultats de chaque thread soient traités dans l’ordre attendu. Si un programme dépend de threads qui s’exécutent dans une séquence imprévisible, une condition de concurrence peut se produire.
Un exemple simple est une porte logique qui traite des valeurs booléennes. La porte logique AND possède deux entrées et une sortie. Si les entrées A et B sont vraies, la porte AND produit TRUE. Si l’une des entrées ou les deux sont fausses, elle produit FALSE. Une condition de concurrence peut se produire si un programme vérifie le résultat de la porte logique avant que les variables A et B soient chargées. Le processus correct serait le suivant :
- Charger la variable A
- Charger la variable B
- Vérifier le résultat de la porte logique AND
Une séquence incorrecte serait la suivante :
- Charger la variable A
- Vérifier le résultat de la porte logique AND
- Charger la variable B
Le résultat du deuxième exemple ci-dessus peut être identique ou non à celui du premier exemple. Par exemple, la variable B peut être FALSE avant et après son chargement, ce qui ne changerait pas le résultat. Si A est FALSE, peu importe que B soit TRUE ou FALSE. Cependant, si A et B sont toutes les deux vraies, le résultat devrait être TRUE. Charger la variable B après avoir vérifié le résultat de la porte logique produirait un résultat incorrect : FALSE.
La sortie incohérente produite par les conditions de concurrence peut provoquer des bogues difficiles à détecter. Les programmeurs peuvent éviter ces problèmes en veillant à ce que les threads soient traités dans une séquence cohérente.
Testez vos connaissances