Codice rientrante: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
BOTarate (discussione | contributi)
m Bot: Aggiungo: ko:재진입성
MItaly (discussione | contributi)
Nessun oggetto della modifica
Riga 6:
# Il codice non deve richiamare nessuna routine che non sia a sua volta rientrante. Per esempio molte implementazioni delle funzioni malloc() e free() in C non lo sono (stesso discorso per ''new'' e ''dispose'' in Pascal) e non devono essere utilizzate. In caso sia necessario allocare memoria si potrebbero utilizzare le API di sistema (dopo averne consultato la documentazione per avere la certezza che siano rientranti), che, potendo in teoria essere chiamate in qualsiasi momento e in qualsiasi situazione (perlomeno in un sistema pienamente multitasking) offrono maggiori garanzie.
# Il codice deve usare, se necessarie, solo variabili temporanee allocate sullo stack.
# Il codice non deve modificare né variabili globali né aree di memoria condivisa né impiegare variabili locali statiche.
 
Se una data porzione di codice non rispetta queste regole, non è possibile farla eseguire da più processi contemporaneamente ma è necessario regolarne l'accesso tramite [[semaforo (informatica)|semafori]] o [[sezione critica|sezioni critiche]], per assicurarsi che venga eseguita da un solo processo alla volta.
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 sia possibile scrivere funzioni ricorsive non rientranti con le dovute cautele.
== Esempi ==
Nel frammento di codice che segue, entrambe le funzioni <code>f()</code> e <code>g()</code> '''non''' sono rientranti.