Vasilisa yaviks - Motor de căutare inteligentă 1

Un program de calculator ca un întreg sau sa procedură separată numită reintrare (din reentrante engleză -. Reinstalare), în cazul în care este proiectat în așa fel încât una și aceeași copie a instrucțiunilor de program în memorie pot fi partajate de mai mulți utilizatori sau procese. În acest caz, al doilea utilizator poate provoca codul reintrare înainte să-l finalizeze primul utilizator, și cel puțin nu ar trebui să conducă la eroare, și nu are nimic de a face cu punerea în aplicare corectă a calculului de declanșare a pierderii (de exemplu, nu pare necesară pentru a îndeplini fragmente de cod deja efectuate) .

Funcții reintrare sunt strâns legate de securitate într-un mediu multithread (fir de siguranță), cu toate acestea, sunt diferite concepte (în programarea practică în cadrul sistemelor de operare moderne, termenul de „reintrare“, de fapt, este echivalent cu termenul «thread-safe»). Furnizarea reentrancy este un element cheie în sistemele multi tasking de programare, în special sistemele de operare.

Pentru a asigura re-intrat trebuie îndeplinite mai multe condiții:

  • nici o parte a codului de asteptare nu ar trebui să fie modificată;
  • procedura numita nu reține informații între invocări;
  • în cazul în care procedura se schimbă orice date, acestea trebuie să fie unic pentru fiecare utilizator;
  • Procedura nu ar trebui să se întoarcă indicii pentru obiecte comune pentru diferiți utilizatori.

În general, este necesar să se prevadă o re-intrat la procesul de asteptare sau funcția este transferată de fiecare dată când procesul de asteptare toate datele relevante. Astfel, o funcție care depinde numai de parametrii săi, nu utilizează variabilele globale și statice și provoacă doar o funcție reentrant este reintrare. În cazul în care o funcție utilizează variabile globale sau statice, trebuie să se asigure că fiecare utilizator păstrat copia sa locală a acestor variabile.

Următoarea funcție de fragment de cod f () și g () nu sunt reintrare.

Aici, f () depinde de g_var variabilă la nivel mondial. cu toate acestea, în cazul în care două procese cauzează f () în același timp, rezultatul este imprevizibil. Prin urmare, f () nu este reintrare. Dar, g () nu este reintrare, deoarece folosește o funcție non-reentrant f ().

Următoarea accum funcția de fragment de cod () nu este, de asemenea, reintrare.

Aici accum - funcția și valoarea acumularea. care este responsabil pentru variabila statica. Dacă accum va fi numit prin diferite procese, rezultatul este, de asemenea, imprevizibil. Ca și în exemplul anterior, a este o cauză comună pentru toate procesele sale.

De asemenea, pierderea reintranta poate apare atunci când expresia este folosită mai mult decât o dată aceeași variabilă.

În acest caz, SQR (x) macro nu va funcționa corect dacă argumentul acesta variază pentru fiecare acces.