Lukkiutuminen
(
engl.
deadlock
) on tilanne, jossa kaksi tai useampia
prosessia
ei paase etenemaan, koska ne odottavat toisiaan. Tilanne syntyy helposti ohjelmointivirheen tuloksena, kun yritetaan ratkaista
rinnakkaisuuden
mukanaan tuomia ongelmia.
Lukkiutumisella on nelja valttamatonta ja samalla riittavaa ehtoa. Tama tarkoittaa sita, etta lukkiutuminen on mahdotonta, elleivat kaikki ehdot ole tosia, ja toisaalta sita, etta lukkiutuminen ennen pitkaa tapahtuu, jos kaikki ehdot ovat tosia. Ehdot ovat:
- Poissulkemisehto. Tama tarkoittaa sita, etta prosessi (tai saie) varaa jonkin resurssin vain omaan kayttoonsa. Resurssi voi olla esimerkiksi
muistia
,
oheislaite
tai
tiedosto
.
- Irrottamattomuusehto. Tama tarkoittaa sita, etta vain prosessi itse voi vapauttaa varaamansa resurssin.
- Varaus-odotusehto. Tama tarkoittaa sita, etta prosessi ei vapauta resurssejaan odottaessaan lisaresurssien vapautumista.
- Silmukkaodotusehto. Tama tarkoittaa sita, etta prosessit odottavat toisiaan silmukassa, eli prosessi A odottaa prosessin B varaamaa resurssia ja painvastoin.
Koska yhdenkin ehdon rikkominen riittaa estamaan lukkiutumiset, ei kaikkia ehtoja tarvitse estaa. Esimerkiksi
virtuaalimuistijarjestelma
rikkoo irrottamattomuusehtoa:
kayttojarjestelma
voi vapauttaa keskusmuistia ilman prosessin myotavaikutusta. Nain keskusmuistin loppuminen kesken ei voi aiheuttaa jarjestelman lukkiutumista. Sovelluksissa on tyypillista varata resurssit aina samassa jarjestyksessa, jolloin silmukkaodotusehto ei voi toteutua. Varjopuolena on se, etta osa varauksista joudutaan talloin tekemaan liian aikaisin.
Lukkiutumista muistuttavia ongelmia ovat
nalkiintyminen
(
engl.
starvation
) ja
livelock
.
[1]
- Ilkka Haikala ja Hannu-Matti Jarvinen:
Kayttojarjestelmat
(luku 3). Talentum 2003.
ISBN 951-762-837-4