Pereiti prie turinio

Lakus kintamasis

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.

Lakus kintamasis – kintamasis, kurio reikšmė lygiagrečiai vykdomose gijose net ir trumpam negali tapti skirtinga nepažeidžiant algoritmo.

Kai kuriose sistemose yra efektyviau visus kiekvienos gijos naudojamus duomenis saugoti atskiroje, su ta gija susietoje atminties dalyje. Jei tie patys duomenys skaitomi bei keičiami ir iš kitos gijos, visų kopijų reikšmės automatiškai sulyginamos. Tačiau labai trumpam laikui gali susidaryti padėtis kuomet to paties kintamojo reikšmė skirtingose gijose skirtinga. Dažniausiai tai neturi jokios reikšmės, tačiau jei turi, tokią klaidą rasti itin sunku: paprastai neteisingas veiksmas pastebimas tik ilgai trunkančių automatinių testų.[1]

Jei algoritmas reikalauja, jog kintamojo reikšmė skirtingose gijose niekada net ir trumpam netaptų skirtinga, toks kintamasis vadinamas lakiu (angl. volatile). Lakūs kintamieji deklaruojami specialiu raktažodžiu. Java kalboje [2] tas raktažodis yra volatile. Šį raktažodį turi ir C++, tačiau šioje kalboje jo reikšmė yra šiek tiek kita. Darbui su lakiais kintamaisiais C++ skirtos kitos konstrukcijos[3].

Lakūs kintamieji niekada neturi papildomų kopijų: reikšmės visada skaitomos iš pagrindinės, visoms gijoms bendros atminties ir ten pat įrašomos. Tačiau, palyginus su kitais kintamaisiais, tai užtrunka ilgiau. Geriausia kurti algoritmą taip, jog lakaus kintamojo problema apskritai neiškiltų, tačiau tai ne visada įmanoma.

Šaltiniai[redaguoti | redaguoti vikitekstą]

  1. Volatile Keyword in Java [1]
  2. Oracle dokumentacija apie volatile
  3. C++ specifikacija, std::memory_order [2]