Saltar para o conteúdo

Reentrância: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
RedBot (discussão | contribs)
m r2.7.2) (Robô: A adicionar: ca:Codi reentrant
Linha 56: Linha 56:
[[uk:Повторновикористовна підпрограма]]
[[uk:Повторновикористовна підпрограма]]
[[zh:可重入]]
[[zh:可重入]]
GANGNAM STYLE

Revisão das 19h43min de 19 de outubro de 2012

Em programação, reentrância refere-se a qualidade duma subrotina de ser executada concorrentemente de forma segura, isto é, a subrotina pode ser invocada enquanto está em execução. Para atenter essa qualidade, a subrotina não deve armazenar dados estáticos (globais) não constantes, não deve retornar o endereço de dados estáticos não constantes, deve trabalhar somente com os dados fornecidos pela subrotina que a invocou, não deve contar com exclusão mútua para recursos construídos com o modelo singleton e só deve invocar subrotinas que também atendam as qualidades anteriores, isto é, que também sejam reentrantes.[1]

Vários níveis de prioridade de tarefas ou multiprocessamento geralmente complica o controle de código reentrante. Código de entrada/saída geralmente não é reentrante pois manipula recursos singleton como discos rígidos. Entretanto, a reentrância é uma funcionalidade importante da programação funcional.

Exemplos

No código C à esquerda, as funções f e g não são reentrantes. Note que f depende da variável global g_var. Portanto, se duas threads executarem a função e acessarem g_var concorrentemente, o resultado é indeterminado, dependerá da sequência de execução. Como g invoca f, ela também não é reentrante. Por outro lado, o código à direita é uma versão alterada do algoritmo não reentrante que elimina o uso do recurso estático, tornando ambas as funções reentrantes.

Referências

  1. Dipak Jha (20 de janeiro de 2005). «Use reentrant functions for safer signal handling» (em inglês). IBM. Consultado em 9 de julho de 2008 

GANGNAM STYLE