Codice rientrante: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
| m Bot:  Aggiungo: sh:Reentrant | m →Esempi: tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (2), </source> → </syntaxhighlight> (2) | ||
| (16 versioni intermedie di 14 utenti non mostrate) | |||
| Riga 1: In [[informatica]], il codice di un [[Programma (informatica)|programma]] o di una [[subroutine|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 [[processo (informatica)|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: Riga 14: 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 [[funzione ricorsiva|funzioni ricorsive]] dovrebbero essere sempre rientranti, sebbene, con le dovute cautele, sia possibile scrivere funzioni ricorsive non rientranti == Esempi == Nel frammento di codice che segue, entrambe le funzioni <code>f()</code> e <code>g()</code> '''non''' sono rientranti. < int g_var = 1; int f(){   g_var = g_var + 2;   return g_var; } int g(){   return f () + 2; } </syntaxhighlight> La funzione <code>f()</code> dipende dalla [[variabile globale]] <code>g_var</code>; perciò, se due processi eseguono la funzione ed accedono a <code>g_var</code> simultaneamente, il risultato dipende dalle tempistiche di  Queste sono invece funzioni rientranti: <syntaxhighlight lang=c> int f(int i){   return i + 2; } int g(int i){   return f(i) + 2; } </syntaxhighlight> == Collegamenti esterni == * Articolo "[http://www-106.ibm.com/developerworks/linux/library/l-reent.html Use reentrant functions for safer signal handling]" di [[Dipak K. Jha]] (in [[lingua inglese]]). {{Portale|Informatica}} [[Categoria:Programmazione concorrente]] | |||