Codice rientrante

codice che consente a una sua copia in memoria di essere condivisa
Versione del 29 mag 2005 alle 17:03 di Lornova (discussione | contributi) (Nuovo articolo, tradotto dalla wiki inglese)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

In informatica, il codice di un programma o di una routine è detto rientrante se è progettato in modo che un singola copia del codice in memoria può essere condivisa da utenti multipli o processi separati. La chiave per progettare codice rientrante è assicurarsi che nessuna porzione del codice possa essere alterata da un differente utente o processo, e che qualsiasi informazione specifica di un utente o processo sia mantenuta in un'area di memoria distinta.

La programmazione rientrante è vitale per molti sistemi multitasking (vedi thread-safe).

La parte di codice dei kernel che implementa la sincronizzazione interprocesso (semafori, sezioni critiche ecc.) non è rientrante per definizione.

Il kernel dei sistemi operativi Windows NT è completamente rientrante, a differenza di quello di Windows 9x, le cui notevoli porzioni di codice a 16 bit derivate da MS-DOS non sono rientranti. Pertanto l'accesso a codice di sistema a 16 bit in Windows 9x è regolato da una sezione critica globale, con il risultato che spesso il sistema operativo opera in maniera monotask.

Esempi

Nel frammento di codice che segue, entrambe le funzioni f() e g() non sono rientranti.

int g_var = 1;

int f()
{
  g_var = g_var + 2;
  return g_var;
}

int g()
{
  return f () + 2;
}

La funzione f() dipende dalla variabile globale g_var; perciò, se due processi eseguono la funzione ed accedono a g_var simultaneamente, il risultato dipende dalle tempistiche di esecuzioni. Perciò, f() non è rientrante. Neppure g() è rientrante, perché richiama f() che non è rientrante.

Collegamenti esterni