- Atomicité (informatique)
-
Pour les articles homonymes, voir Atomicité.
L'atomicité est une propriété utilisée en programmation concurrente pour désigner une opération ou un ensemble d'opérations d'un programme qui s'exécute entièrement sans pouvoir être interrompue avant la fin de leur déroulement. Une opération qui vérifie cette propriété est qualifiée d'« atomique », ce terme dérive de ατομος (atomos) qui signifie « que l'on ne peut diviser »[1].
Ce concept s'applique par exemple à une partie d'un programme dont le processus ou le thread qui la gère ne cédera pas le monopole sur certaines données à un autre processus pendant tout le déroulement de cette partie. Ce concept s'applique également aux transactions des bases de données.
En règle générale, les instructions assembleur peuvent être considérées comme atomiques, mais cela ne suffit pas pour assurer une cohérence des données. Pour ce faire des mécanismes de synchronisation doivent être mise en œuvre. Par conséquent et par extension, il est possible de dire qu'une section protégée de la sorte, qualifiée de section critique protégée par une exclusion mutuelle, est aussi atomique.
Exemple d'instruction spéciale devant être atomique
L'instruction Test And Set est un exemple concret d'instruction devant être atomique. Cette instruction travaille sur une variable booléenne (ici notée V). Le fonctionnement de cette instruction est le suivant :
TEST_AND_SET(V) : C = non V V = Vrai retourner C
Une telle instruction (si elle est atomique) permet d'implémenter un algorithme d'exclusion mutuelle par attente active. En effet, il est possible de définir les protocoles d'entrée et de sortie suivants :
Entree : REPETER ne rien faire JUSQU'À TEST_AND_SET(Verrou)
SORTIE : Verrou = Faux -- Cette affectation est considérée comme atomique.
Le protocole d'entrée boucle tant que la variable Verrou est vrai. Si celle-ci est fausse, alors TEST_AND_SET retourne Vrai et modifie cette dernière variable. Le protocole de sortie fixe simplement la variable Verrou à faux ce qui autorise l'entrée d'une tâche dans la section critique.
En général, les attentes actives sont par ailleurs non recommandées, car elles consomment du temps processeur au lieu de donner la main à un autre processus qui pourrait en avoir besoin. Cependant, dans de rares cas (spinlocks), une attente active peut être plus intéressante qu'un verrou.
Exemples d'instructions atomiques
- Test-and-set
- Fetch-and-add
- Compare-and-swap
- Load-Link/Store-Conditional
Notes et références
- lexicographiques et étymologiques de « atome » du CNRTL. Définitions
Wikimedia Foundation. 2010.