Jos koodisi on prosessissa, jossa useita säikeitä pyörii samanaikaisesti, se saattaa ajaa koodia samaan aikaan. Jos jokaisen suorituksen tulos on sama kuin yksittäisellä säikeellä ja muiden muuttujien arvot ovat odotetut samat, se on säiketurvallinen. Toisin sanoen, luokan tai ohjelman tarjoama rajapinta on atominen säikeille tai useiden säikeiden välillä vaihtaminen ei aiheuta epäselvyyttä rajapinnan suoritustuloksessa, mikä tarkoittaa, ettei synkronointia tarvitse harkita. Säikeiden turvallisuusongelmat johtuvat sekä globaaleista että staattisista muuttujista. Jos jokaisessa säikeessä on lukuoperaatioita vain globaaleille muuttujille ja staattisille muuttujille, mutta ei kirjoitusoperaatioita, yleisesti ottaen tämä globaali muuttuja on säikeiden turvallinen; Jos useampi säike suorittaa luku- ja kirjoitustoimintoja muuttujalle samanaikaisesti, säikeiden synkronointi on yleensä tarpeen, muuten se voi vaikuttaa säikeen turvallisuuteen.
Lukituksen tarkoituksena on estää samanaikaiset operaatiot monisäikeisessä suorituksessa, ja viitelukon objektit sallivat vain yhden säikeen toimimisen kerrallaan lukitulla alueellaan.
Lock voi lukita vain yhden referenssityyppimuuttujan, eli lukita osoitteen
Lukituksen kanssa ja ilman juoksun tuloksissa on ero:
Lukituksen jälkeen: i:n arvo laskee yksi kerrallaan, hyppyjä ei tapahdu, ei toistuvia tuloksia, kunnes arvo on 0;
Ei lukkoa: i:n lähtöarvo hyppää, epäjatkuva laskee, ja voi myös olla -1 lähtöarvo;
Syy: Lukituksen lisäämisen jälkeen vain yksi säie voi suorittaa koodin lukitulla alueella kerrallaan, ja molemmat säikeet suoritetaan järjestyksessä, joten keskeytettyä tulosta ei ole. |