Réentrant

Réentrant signifie qu'une fonction peut être interrompue au milieu de son exécution, puis appelée à nouveau ("ré-entrée") en toute sécurité sans corrompre son état d'exécution. On y parvient généralement en utilisant uniquement des variables locales au sein de la fonction, qui ne sont pas partagées avec d'autres codes.
Le code réentrant est souvent utilisé dans les applications à temps critique, où il est important que le code puisse être interrompu à tout moment et repris en toute sécurité. Il est également souvent utilisé dans le code piloté par les interruptions, où un gestionnaire d'interruption peut avoir besoin d'appeler un autre code qui n'est pas nécessairement conçu pour être sécurisé contre les interruptions.

Qu'est-ce qu'un appel réentrant ?

Un appel réentrant est une fonction qui peut être appelée en toute sécurité à partir d'un gestionnaire de signaux. Lorsqu'un signal est capté, le gestionnaire de signal est exécuté avec la même pile que le processus qui a provoqué le signal. Si le gestionnaire de signaux appelle une fonction qui n'est pas réentrante, la fonction peut modifier les données de la pile utilisée par le gestionnaire de signaux, ce qui entraîne un comportement incorrect du gestionnaire de signaux.

Pourquoi est-il appelé verrou réentrant ?

Un verrou réentrant est un verrou qui peut être verrouillé plusieurs fois par le même thread. Ceci est utile dans les situations où un thread doit verrouiller plusieurs ressources, par exemple lors de l'acquisition de plusieurs verrous ou lors de l'appel d'une méthode synchronisée depuis une méthode synchronisée.

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

Le code réentrant est un code qui peut être appelé en toute sécurité à partir d'un gestionnaire de signaux. Cela signifie que le code ne peut pas s'appuyer sur des données globales ou statiques et qu'il doit veiller à ne pas appeler de code qui pourrait lui-même être non réentrant.

Le code thread-safe est un code qui peut être appelé en toute sécurité depuis un thread. Cela signifie que le code ne peut pas s'appuyer sur des données globales ou statiques et qu'il doit veiller à ne pas appeler de code qui pourrait lui-même être non sécurisé par les threads. Un verrou réentrant est-il un type de verrou ? Les verrous réentrants sont un type de verrou qui peut être acquis plusieurs fois par le même thread. Par opposition aux verrous non réentrants, qui ne peuvent être acquis qu'une seule fois par un thread. Les méthodes statiques sont-elles à l'abri des threads ? Oui, les méthodes statiques sont thread-safe. En effet, elles ne sont pas associées à une instance particulière d'une classe. Il n'y a donc aucun risque qu'un thread modifie l'état d'un objet pendant qu'un autre thread y accède.