Réentrant

Définition, exemples et bonnes pratiques

À retenir

  • Ne dépend pas d'un état global ou partagé.
  • Peut être interrompu et repris sans risque de corruption.
  • Indispensable pour la fiabilité des systèmes complexes et parallèles.

Un programme ou une fonction est dit réentrant s'il peut être interrompu en pleine exécution, puis relancé en toute sécurité avant que sa première exécution ne soit terminée. Imaginez une recette de cuisine : si plusieurs cuisiniers peuvent l'utiliser en même temps sans se mélanger les pinceaux ni se voler leurs ingrédients respectifs, cette recette est réentrante.

Étymologie

Dérivé du français « ré-entrer ». Le concept est apparu avec l'informatique moderne et le multitâche dans les années 1960, lorsqu'il est devenu nécessaire que plusieurs processus puissent appeler simultanément les mêmes routines du système d'exploitation sans provoquer de crash ou de corruption de données.

Exemples d'usage

  • Une fonction mathématique simple comme calculer_carre(x) qui ne manipule que ses propres variables locales.
  • Les gestionnaires de signaux dans les systèmes Unix (Signal Handlers).
  • Une fonction récursive qui s'appelle elle-même plusieurs fois de suite.

Cas d'usage

Ce concept est fondamental dans le développement système (noyaux d'OS), la programmation de systèmes embarqués où les interruptions matérielles surviennent à tout moment, et dans le développement d'applications multithread (plusieurs tâches s'exécutant en parallèle).

Bonnes pratiques

Pour qu'une fonction soit réentrante, elle ne doit jamais modifier de variables globales ou de variables statiques. Elle doit uniquement travailler avec les données qu'on lui passe en paramètres et utiliser des variables stockées sur la pile (stack), car chaque exécution possède sa propre pile isolée des autres.

Synonymes

rentrant

Antonymes

non réentrant

Conseil

Si vous débutez, retenez cette règle d'or : pour rendre une fonction réentrante, évitez les variables déclarées en dehors de la fonction et ne modifiez jamais d'objets passés par référence sans grande prudence.

Questions fréquentes

Quelle est la différence entre réentrant et thread-safe ?

La réentrance est une propriété plus stricte. Un code 'thread-safe' peut utiliser des verrous (mutex) pour protéger des données partagées, alors qu'un code réentrant évite généralement tout partage pour pouvoir être interrompu et relancé sans jamais se bloquer lui-même.

Pourquoi une fonction récursive doit-elle être réentrante ?

Parce qu'elle s'appelle elle-même avant d'avoir fini ; si elle modifiait une variable globale commune à chaque appel, les résultats des étapes précédentes seraient écrasés par les nouvelles étapes.