Kui su kood on protsessis, kus töötab korraga mitu lõime, võib see koodi korraga käivitada. Kui iga jooksu tulemus on sama mis ühe lõime tulemus ja teiste muutujate väärtused on samad nagu oodatud, on see lõimele ohutu. Teisisõnu, klassi või programmi poolt pakutav liides on lõimede jaoks atomiline või mitme lõime vahel vahetamine ei põhjusta liidese täitmise tulemuses ebamäärasust, mis tähendab, et sünkroniseerimist ei pea arvestama. Lõime ohutuse probleemid on põhjustatud nii globaalsetest kui ka staatilistest muutujatest. Kui igas lõimes on lugemistoimingud ainult globaalsete muutujate ja staatiliste muutujate jaoks, kuid kirjutamistoiminguid pole, siis üldiselt on see globaalne muutuja lõimekindel; Kui mitu lõime teostavad samaaegselt ühe muutuja lugemis- ja kirjutamistoiminguid, on lõimede sünkroniseerimine üldiselt vajalik, vastasel juhul võib see mõjutada lõime turvalisust.
Lukustuse eesmärk on takistada samaaegseid operatsioone mitmelõimelise täitmise korral ning viiteluku tüüpi objektid lubavad lukustatud alal korraga töötada ainult ühel lõimel.
Lock saab lukustada ainult ühe viitetüübi muutuja, st aadressi lukustada
Lukustusega ja ilma jooksu tulemustel on erinevus:
Pärast lukustamist: i väärtus väheneb ükshaaval, hüppeid ei toimu, ei korduvat väljundit, kuni väärtuseni 0;
Lukustus puudub: i väljundväärtus hüppab, katkestatud väheneb ja võib olla ka -1 väljundiga;
Põhjus: Pärast lukustuse lisamist saab korraga ainult üks lõim koodi lukustatud alal täita ning mõlemad lõimed täidetakse järjekorras, seega katkestatud väljundit ei toimu. |