[ leka @ 15.01.2002. 20:00 ] @
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. |