Résumé
En programmation concurrente, une section critique est une portion de code dans laquelle il doit être garanti qu'il n'y aura jamais plus d'un thread simultanément. Il est nécessaire d'utiliser des sections critiques lorsqu'il y a accès à des ressources partagées par plusieurs threads. Une section critique peut être protégée par un mutex, un sémaphore ou d'autres primitives de programmation concurrente. Puisqu'à un moment donné, jamais plus d'un thread ne peut être actif dans une section critique, le thread la détenant doit la libérer le plus vite possible pour éviter qu'elle ne devienne un goulot d'étranglement. Libérer la section critique permet d'améliorer les performances en permettant aux threads en attente d'y accéder. Soient deux threads qui souhaitent incrémenter un même compteur. L'incrémentation doit être protégée par une section critique. En effet, l'incrémentation d'une variable n'est pas forcément une opération atomique. Il serait par exemple possible de traduire l'incrémentation d'une variable dans le code assembleur (inspiré du bytecode de la JVM) suivant : load @variable // charger la variable sur une pile (en Java, chaque thread dispose de sa propre pile d'exécution) load 1 // charger la constante 1 sur la pile add // effectuer l'incrémentation store @variable // stocker le sommet de la pile dans la variable Dans cet exemple, il faut quatre opérations pour réaliser l'incrémentation de la variable. Si deux tâches souhaitent effectuer l'incrémentation en même temps, le résultat de l'incrémentation ne sera pas juste. Par exemple, si la séquence des opérations est la suivante : La tâche 1 charge la variable partagée sur sa pile d'exécution. La tâche 2 charge la variable partagée sur sa pile d'exécution. La tâche 1 charge la constante 1 sur sa pile d'exécution. La tâche 2 charge la constante 1 sur sa pile d'exécution. La tâche 1 effectue l'incrémentation. La tâche 1 stocke le sommet de sa pile dans la variable partagée. La tâche 2 effectue l'incrémentation. La tâche 2 stocke le sommet de sa pile dans la variable partagée.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.