Lukitus (ohjelmointi)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 2. heinäkuuta 2015 tarkistetusta versiosta . tarkastukset vaativat 5 muokkausta .

Tietojenkäsittelytieteessä lukko on  synkronointimekanismi, joka mahdollistaa yksinomaisen pääsyn jaettuun resurssiin useiden säikeiden välillä . Lukot ovat yksi tapa varmistaa samanaikaisuuden valvontakäytäntö .

Lukkojen tyypit

Periaatteessa käytetään pehmeää lukkoa , joka olettaa, että jokainen säie yrittää saada lukon ennen vastaavan jaetun resurssin käyttöä. Joissakin järjestelmissä on pakollinen lukitusmekanismi , jota käytettäessä yritys saada luvaton pääsy lukittuun resurssiin keskeytetään antamalla poikkeus ketjuun, joka yritti päästä käsiksi.

Semafori  on yksinkertaisin lukkotyyppi. Tietojen käytön suhteen ei tehdä eroa käyttötilojen välillä: jaettu (vain luku) tai yksinoikeus (luku-kirjoitus). Jaetussa tilassa useat säikeet voivat pyytää lukitusta päästäkseen käsiksi tietoihin vain luku -tilassa. Yksinomainen käyttötila on käytössä myös päivitys- ja poistoalgoritmeissa.

Lukitustyypit erottuvat strategiasta, jolla estetään säikeen suorittamisen jatkaminen. Useimmissa toteutuksissa lukituspyyntö estää säiettä jatkamasta suorittamista, kunnes lukittu resurssi on käytettävissä.

Spinlock  on lukko, joka odottaa silmukassa, kunnes pääsy myönnetään. Tällainen lukko on erittäin tehokas, jos lanka odottaa lukkoa pienen ajan, jolloin vältetään lankojen liiallinen uudelleenjärjestely. Pääsyn odottamisen kustannukset ovat merkittävät, jos jokin säikeistä pitää lukkoa pitkään.

Lukitusmekanismin tehokas toteuttaminen edellyttää laitteistotason tukea. Laitteistotuki voidaan toteuttaa yhtenä tai useampana atomioperaationa , kuten " testaa ja aseta ", " hae ja lisää " tai " vertaa ja vaihtaa ". Tällaisten ohjeiden avulla on mahdollista tarkastaa keskeytyksettä, että lukko on vapaa, ja jos on, lukon hankkiminen.

Yksiprosessorijärjestelmissä on mahdollista suorittaa käskyjä ilman laitteiston keskeytyksiä käyttämällä erikoiskäskyjä tai käskyetuliiteitä, jotka estävät keskeytykset tilapäisesti, mutta tämä lähestymistapa ei toimi jaetun muistin moniprosessorijärjestelmissä. Lukkojen täysi tuki moniprosessoriympäristössä voi vaatia melko monimutkaista laitteisto- ja ohjelmistotukea, johon liittyy merkittäviä ajoitusongelmia .

Tietokantatason lukot

Muistiinpanot