Jei jūsų kodas yra procese, kuriame vienu metu veikia kelios gijos, gali būti, kad jis paleidžia kodą tuo pačiu metu. Jei kiekvieno paleidimo rezultatas yra toks pat kaip vienos gijos, o kitų kintamųjų reikšmės yra tokios pačios, kaip tikėtasi, jis yra saugus gijai. Kitaip tariant, klasės ar programos teikiama sąsaja yra atominė gijoms arba perjungimas tarp kelių gijų nesukelia dviprasmiškumo sąsajos vykdymo rezultate, o tai reiškia, kad mums nereikia svarstyti sinchronizavimo. Sriegių saugos problemas sukelia tiek globalūs, tiek statiniai kintamieji. Jei kiekviena gija turi tik globalių kintamųjų ir statinių kintamųjų skaitymo operacijas, bet nėra rašymo operacijų, paprastai kalbant, šis globalus kintamasis yra saugus gijai; Jei kelios gijos vienu metu atlieka kintamojo skaitymo ir rašymo operacijas, paprastai reikalingas gijų sinchronizavimas, kitaip tai gali turėti įtakos gijų saugumui.
Užrakto tikslas yra užkirsti kelią vienalaikėms operacijoms, kai vykdomas kelių gijų vykdymas, o etaloninio užrakto tipo objektai leidžia vienu metu veikti tik vienai gijai užrakintoje srityje.
Užraktas gali užrakinti tik vieną nuorodos tipo kintamąjį, tai yra, užrakinti adresą
Yra skirtumas tarp bėgimo su užraktu ir be jo rezultatų:
Po užrakinimo: i reikšmė mažės po vieną, nebus šuolių, nebus pakartotinės išvesties, kol bus 0;
Nėra užrakto: i vertės išvestis šokinės, nepertraukiamai mažės, taip pat gali turėti -1 reikšmės išvestį;
Priežastis: Pridėjus užraktą, tik viena gija vienu metu gali vykdyti kodą užrakintoje srityje, o abi gijos vykdomos eilės tvarka, todėl nebus nutrauktos išvesties. |