Lukkiutuminen

Wikipediasta
Siirry navigaatioon Siirry hakuun

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:

  1. Poissulkemisehto. Tama tarkoittaa sita, etta prosessi (tai saie) varaa jonkin resurssin vain omaan kayttoonsa. Resurssi voi olla esimerkiksi muistia , oheislaite tai tiedosto .
  2. Irrottamattomuusehto. Tama tarkoittaa sita, etta vain prosessi itse voi vapauttaa varaamansa resurssin.
  3. Varaus-odotusehto. Tama tarkoittaa sita, etta prosessi ei vapauta resurssejaan odottaessaan lisaresurssien vapautumista.
  4. 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
  1. Starvation and Livelock docs.oracle.com . Viitattu 23.11.2019. (englanniksi)