Lenktynių aplinka

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Jump to navigation Jump to search

Lenktynių aplinka (angl. race condition) yra situacija kuomet reali įvykių seka nesutampa su ta, kurios tikėjosi sistemą kuriantis žmogus. Terminas pradėtas vartoti nuo maždaug 1954 metų, iš pradžių skaitmeninės elektronikos prietaisams. [1] Šiuo metu tai dažna programavimo problema.

Taip atsitinka kuomet objektu vienu metu manipuliuoja du ar daugiau vienu lygiagrečiai vykstančių procesų (gijų). Pavyzdžiui, šis metodas (java):

     static int skaitiklis;
     int kita_reikšmė()
       {
          skaitiklis = skaitiklis + 1;
          // Kita gija gali šioje vietoje padidinti skaitiklį dar kartą. 
          return skaitiklis;
       },

jei vykdomas kelių gijų vienu metu, gali keliskart grąžinti tą pačią skaitiklio reikšmę, ko nepatyręs programuotojas paprastai nesitiki.

Dažna taip pat situacija, kuomet vienas iš dviejų bendras vidines struktūras turinčių objektų modifikuojamas taip, jog antrasis nebegali teisingai atlikti savo funkcijas. Objektai turi bendrų vidinių struktūrų jei juose esama nuorodų į tą patį trečią objektą. Neteisinga darbą sukelia pasikeitusi šio bendro objekto būsena.

Klasikinis konkurentinės modifikacijos pavyzdys yra kolekcija ir jos iteratorius. Modifikavus kolekciją, iteratorius neretai nebegali teisingai tęsti savo darbo, nes pasikeitė su juo susijusi kolekcija. Jei vienas procesas naudoja iteratorių peržiūrėti visiems kolekcijos elementas or kits (lygiagretus) procesas kurį nors elementą tuo pat metu prideda ar išmeta, pirmojo proceso darbo rezultatas gali būti visiškai klaidingas.

Dažnai lenktynių aplinkos yra labai sunkiai aptinkamos. Jos gali būti ištaisomos įvairiais semaforais. Taip pat naudojami nekintantys objektai, kurie savo būsenų kartą sukurti nekeičia.

Šaltiniai[redaguoti | redaguoti vikitekstą]

  1. Huffman, David A. "The synthesis of sequential switching circuits." (1954).