- Réentrance
-
En informatique, la réentrance est la propriété pour une fonction d'être utilisable simultanément par plusieurs tâches utilisatrices. La réentrance permet d'éviter la duplication en mémoire vive d'un programme utilisé simultanément par plusieurs utilisateurs.
L'écriture de code réentrant était autrefois une tâche très ardue. Elle s'est simplifiée avec les langages actuels qui autorisent :
- l'allocation dynamique de mémoire,
- la séparation, dans des segments distincts, du code et des données,
- la gestion de piles.
Le noyau d'un système d'exploitation comporte souvent des parties non réentrantes afin d'éviter des complications fâcheuses (incohérence de données critiques, perte de performances). L'écriture de modules destinés à être exécutés dans l'espace noyau reste, pour cette raison, délicate.
Réentrance et langages de programmation
La réentrance des programmes n'est pas forcément garantie par tous les langages de programmation. Ainsi, par exemple, un programme écrit en Ada sera toujours réentrant alors qu'un programme écrit en C ne l'est pas par défaut. La non-réentrance d'un programme est rarement un problème dans le cas de la programmation monotâche, mais peut produire des résultats désastreux en programmation concurrente.
Relation à "thread-safe"
Les deux concepts de réentrance et de thread-safe concernent la manière dont les fonctions gèrent les ressources. Le concept de réentrance a un impact sur l'interface externe de la fonction, alors que le concept de thread-safe concerne l'implémentation de la fonction.
- Dans la plupart des cas, pour transformer une fonction non réentrante en une fonction réentrante, on doit modifier son interface externe pour que toutes les données soient fournies par l'appelant de la fonction (remplacement des éventuelles variables globales utilisées dans la fonction par des variables locales).
- Pour rendre thread-safe une fonction non thread-safe, un changement d'implémentation seul suffit. De manière usuelle, l'ajout d'un point de synchronisation tel qu'une section critique ou un sémaphore est utilisé pour protéger l'accès a une ressource partagée d'un accès concurrent d'une autre tâche/thread.
La réentrance est une propriété plus forte que le thread-safe, autrement dit (et par définition) :
- Toute fonction réentrante est thread-safe.
- Une fonction thread-safe n'est pas forcément réentrante.
Voir aussi
- Section critique
- Thread-safe
- Java propose dans sa bibliothèque logicielle des classes spécialisées pour gérer les problèmes de réentrance.
Wikimedia Foundation. 2010.