Codi reentrant

De Viquipèdia
Dreceres ràpides: navegació, cerca

En programació la reentrància es refereix a la qualitat d'una subrutina per a ser executada concurrentment d'una forma segura, és a dir, la subrutina es pot invocar mentre s'està executant. Per a tenir aquesta qualitat, la subrutina no pot emmagatzemar dades estàtiques (globals) ni tampoc constants, no ha de retornar la direcció de les dades estàtiques ni de les constants, ha de treballar només amb les dades proporcionades pel subprograma que l'ha invocat, no ha de tenir exclusió mútua dels recursos construïts sobre el model de Singleton i al seu torn només ha invocar subrutines que també compleixen amb les qualitats esmentades, és a dir, que també siguin reentrants [1]

Múltiples nivells de les tasques prioritàries o multi en general complica el control de codi reentrant. Codi d'entrada/sortida generalment no és reentrant a causa Singleton recursos com ara manetes de discs durs. No obstant això, el rebaix és una característica important de programació funcional.

Exemples [modifica]

En el codi C de l'esquerra, les funcions f e g no són reentrants. Cal recordar que f depèn de la variable global g_var . Així que si dos fil realitzar la funció i l'accés g_var a la vegada, el resultat és indeterminat, depèn de la seqüència d'execució. Com g invoca f , no és reentrant. D'altra banda, el codi de la dreta és una versió modificada de l'algorisme no reentrant que elimina l'ús de la característica estàtica, fent dues funcions reentrant.

No reentrant
int g_var = 1;
 
int f()
{
  g_var = g_var + 2;
  return g_var;
}
 
int g()
{
  return f() + 2;
}
Reentrant
int f(int i)
{
  return i + 2;
}
 
int g(int i)
{
  return f(i) + 2;
}

Nota [modifica]

  1. Dipak Jha. Use de funcions reentrants per al maneig més segur de senyals (en anglès). IBM, 20 gener 2005 [Consulta: 9 juliol 2008].