O termo “reentrante” refere-se a uma propriedade de um programa ou sub-rotina de computador que lhe permite ser interrompido no meio da sua execução e depois chamado de novo em segurança (“reentrado”) a partir do ponto em que foi interrompido.
Um programa reentrante é aquele que pode ter múltiplas execuções em andamento ao mesmo tempo sem interferir um com o outro. Isto contrasta com um programa não reentrante, que pode ter apenas uma execução de cada vez.
A reentrância é importante em programas que podem ser interrompidos, tais como manipuladores de interrupção em um sistema operacional. Se um programa não-reentrante for interrompido, pode não ser seguro chamá-lo novamente até que tenha terminado a execução. Isto pode levar a resultados imprevisíveis ou até mesmo a falhas.
A reentrância também é importante em programas com múltiplas roscas, onde várias roscas de execução podem estar em execução ao mesmo tempo. Se um programa não centralizado não é seguro para threads, então pode não ser seguro chamá-lo de mais de uma thread de cada vez. Isto pode levar novamente a resultados imprevisíveis ou a falhas. Qual é a diferença entre código reentrante e código thread-safe? Código reentrante é o código que pode ser chamado com segurança a partir de um manipulador de sinais. Isto significa que o código não pode confiar em nenhum dado global ou estático, e deve ter cuidado para não chamar nenhum código que possa ser não reentrante.
Código de segurança é o código que pode ser chamado com segurança a partir de uma linha. Isto significa que o código não pode confiar em nenhum dado global ou estático, e deve ter o cuidado de não chamar nenhum código que possa ser, em si mesmo, não seguro para threads.
Porque é chamado de bloqueio reentrante?
Um cadeado reentrante é um cadeado que pode ser bloqueado várias vezes pela mesma thread. Isto é útil em situações onde uma thread precisa bloquear vários recursos, por exemplo, ao adquirir várias travas ou ao chamar um método sincronizado a partir de um método sincronizado.
O que é uma chamada reentrante?
Uma chamada reentrante é uma função que pode ser chamada com segurança de dentro de um manipulador de sinal. Quando um sinal é capturado, o manipulador de sinal é executado com a mesma pilha como o processo que causou o sinal. Se o gestor de sinal chamar uma função que não é reentrante, então a função pode modificar dados na pilha que está sendo usada pelo gestor de sinal, fazendo com que o gestor de sinal se comporte incorretamente. O método estático é seguro para a rosca? Sim, os métodos estáticos são thread-safe. Isto porque eles não estão associados a nenhuma instância particular de uma classe, portanto não há risco de uma thread modificar o estado de um objeto enquanto outra thread está acessando. É um tipo de bloqueio reentrante? Travas reentrantes são um tipo de trava que pode ser adquirida várias vezes pela mesma thread. Isto é contrastado com as fechaduras não reentrantes, que só podem ser adquiridas uma vez por uma thread.