Dakle evo ukratko o reentrantnim funkcijama... Sam taj pojam vezan je
za problem sa kojim su se susretali programeri koji su pisali programe
koji su trebali da rade u multitaskingu.
Zamislimo ovakav slucaj - imamo vunkciju proveri_vreme() koja je recimo
iz neke nase biblioteke, koja nam vraca trenutno vreme, recimo kao
timestamp, a koja normalno radi super. Hajde da malo dodatno
zakomplikujemo stvari. Recimo da je je u jednom trenutku vremena nasa
rutina pocela da ispisuje trenutno vreme - "Fri, Sep 6, 1991 at 12:03:44 PM by DL".
U jednom trenutku (sto se uvek desava!) rutinu je prekinuo sistem, jer
je vreme da neki drugi proces nastavi sa svojim radom (tako to ide u
multitaskingu...). Znaci rutina je ispisivala "F", pa "r", pa "i" i
PAF!- prekinuo je sistem! Recimo da je sistem "predao stafetu" drugom
procesukoji takodje koristi istu ovu rutinu! To se zove "system
REENTERS again the same routine" na anglijskom - sve Vam je jasno sada
zasto se citava stvar zove reentrantne funkcije i slicno... Dakle drugi
proces je pozvao proveri_vreme() a posto nasa jadna funkcija nije
reentrantna, ona iz pocetka krece da ispisuje trenutno vreme! :( Na
kraju imamo rezultat da na izlazu vidimo rezultat u obliku "FriFri, Sep
6, Se,...", kao sto vidite, rezultati su se pomesali!
Ovaj primer je najlaksi, i jedan od najlaksih primera pomocu kojih se
mogu objasniti slicne pojave, na ovome se ne zavrsavaju problemi
pisanja aplikacija za multitasking, to je samo pocetak nazalost.
Srecom, danas ima vise kvalitetnih biblioteka koje u sebi sadrze sve
potrebno za pisanje kvalitetnog softvera u multitaskingu.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin