Codice rientranteIn informatica, il codice di un programma o di una routine è detto rientrante se è progettato in modo che una singola copia del codice in memoria possa essere condivisa ed eseguita contemporaneamente e senza risultati inaspettati da utenti multipli o processi separati. La programmazione rientrante è vitale per molti sistemi multitasking (vedi thread-safe). Affinché una routine o comunque una parte di codice sia rientrante deve soddisfare questi requisiti:
Se una data porzione di codice non rispetta queste regole, non è possibile farla eseguire da più processi contemporaneamente ma è necessario regolarne l'accesso tramite semafori o sezioni critiche, per assicurarsi che venga eseguita da un solo processo alla volta. 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. Le funzioni ricorsive dovrebbero essere sempre rientranti, sebbene, con le dovute cautele, sia possibile scrivere funzioni ricorsive non rientranti. EsempiNel frammento di codice che segue, entrambe le funzioni int g_var = 1;
int f(){
g_var = g_var + 2;
return g_var;
}
int g(){
return f () + 2;
}
La funzione Queste sono invece funzioni rientranti: int f(int i){
return i + 2;
}
int g(int i){
return f(i) + 2;
}
Collegamenti esterni
|
Portal di Ensiklopedia Dunia