Reentrante Definición / explicación

El código reentrante es un código que puede ser ejecutado con seguridad por más de un hilo de ejecución al mismo tiempo. Es decir, el código no depende de ningún dato compartido que pueda ser corrompido por otro hilo de ejecución.
El código reentrante se utiliza a menudo en el código del sistema operativo, donde es importante que el código sea capaz de manejar con seguridad las interrupciones de múltiples dispositivos. ¿Por qué se llama bloqueo reentrante? Los bloqueos reentrantes se llaman así porque permiten al hilo que tiene el bloqueo volver a entrar en él. Esto es diferente de un bloqueo no reentrante que no permitiría al hilo reentrar en el bloqueo y en su lugar lanzaría una excepción.

¿Por qué necesitamos un bloqueo reentrante?

Los bloqueos reentrantes son importantes porque permiten que los mecanismos de bloqueo se implementen de manera que se evite el bloqueo. Sin los bloqueos reentrantes, sería posible que dos hilos adquirieran cada uno un bloqueo, y luego no pudieran proceder porque cada uno está esperando que el otro libere su bloqueo. Los bloqueos reentrantes resuelven este problema al permitir que un hilo adquiera un bloqueo varias veces. Si un hilo intenta adquirir un bloqueo que ya tiene, el bloqueo se concederá sin bloquearse. Esto permite al hilo proceder y liberar el bloqueo cuando haya terminado, sin bloquear el sistema. ¿Por qué se llama bloqueo reentrante? Los bloqueos reentrantes son bloqueos que pueden ser bloqueados por un hilo varias veces. Esto puede ser útil cuando varios hilos necesitan bloquear el recurso, como cuando se adquieren y liberan varios bloqueos de la misma manera. ¿Por qué StringBuffer es seguro para los hilos? StringBuffer es seguro porque sincroniza todos sus métodos. Esto significa que sólo un hilo puede acceder a una instancia de StringBuffer a la vez. Esto es importante porque significa que el StringBuffer no será corrompido por múltiples hilos que intenten modificarlo simultáneamente.

¿Por qué malloc () no es una función reentrante?

La reentrada es la capacidad de una función de ser interrumpida en medio de su ejecución y luego reanudar esa ejecución desde el punto en que fue interrumpida. Esto se logra generalmente guardando el estado de la ejecución de la función (es decir, sus variables, etc.) en una estructura de datos antes de que la función sea interrumpida, y luego restaurando ese estado cuando la función se reanuda.
Malloc no es una función reentrante porque no guarda el estado de su ejecución. Esto significa que si malloc se interrumpe en medio de su ejecución, no podrá reanudar dicha ejecución desde el punto en el que se interrumpió. Esto podría llevar a un comportamiento inesperado en el programa que está usando malloc.

Deja un comentario