Atomicité (informatique)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : Navigation, rechercher
Page d'aide sur l'homonymie 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.

[modifier] Exemples d'instructions spéciales devant être atomiques

Plusieurs instructions utilisées dans certaines architectures parallèles sont atomiques, et servent à implémenter des synchronisations ou des algorithmes non-bloquants.

On utilise souvent les instructions Compare-and-swap, Fetch-and-add ou Test-and-set, ainsi que le couple d'instructions Load-Link/Store-Conditional.

  • L'instruction Test-and-set s'applique à un booléen, le met à la valeur "VRAI" et renvoie l'opposé de sa valeur d'origine. Il permet d'implémenter des verrous.
  • Fetch-and-add incrémente de manière atomique un entier en mémoire : il permet de réaliser des compteurs ou des barrières.
  • Compare-and-swap est plus général, et permet de modifier une valeur en vérifiant auparavant celle-ci, par exemple pour s'assurer qu'elle n'a pas été modifiée entretemps.
  • Les deux instructions Load-Link et Store-Conditional permettent de s'affranchir des problèmes de Compare-and-swap, si une variable est modifiée, puis ramenée à sa valeur d'origine. Load-Link charge une valeur depuis une adresse mémoire, Store-Conditional y stocke une autre valeur et échoue si une modification quelconque a eu lieu depuis le Load-Link.

[modifier] Mémoire transactionnelle

La mémoire transactionnelle est un moyen de rendre une série d'opérations atomique : une transaction permet de faire plusieurs modifications, et échoue si certaines des variables utilisées ont été modifiées. Un tel mécanisme est employé dans les bases de données sous la forme de Mémoire transactionnelle logicielle.


[modifier] Notes et références

  1. Définitions lexicographiques et étymologiques de « atome » du CNRTL.
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Contribuer
Imprimer / exporter
Boîte à outils
Autres langues