拉肚子可以吃什么药
Lukkiutuminen (engl. deadlock) on tilanne, jossa kaksi tai useampia prosessia ei p??se etenem??n, koska ne odottavat toisiaan. Tilanne syntyy helposti ohjelmointivirheen tuloksena, kun yritet??n ratkaista rinnakkaisuuden mukanaan tuomia ongelmia.
Lukkiutumisella on nelj? v?ltt?m?t?nt? ja samalla riitt?v?? ehtoa. T?m? tarkoittaa sit?, ett? lukkiutuminen on mahdotonta, elleiv?t kaikki ehdot ole tosia, ja toisaalta sit?, ett? lukkiutuminen ennen pitk?? tapahtuu, jos kaikki ehdot ovat tosia. Ehdot ovat:
- Poissulkemisehto. T?m? tarkoittaa sit?, ett? prosessi (tai s?ie) varaa jonkin resurssin vain omaan k?ytt??ns?. Resurssi voi olla esimerkiksi muistia, oheislaite tai tiedosto.
- Irrottamattomuusehto. T?m? tarkoittaa sit?, ett? vain prosessi itse voi vapauttaa varaamansa resurssin.
- Varaus-odotusehto. T?m? tarkoittaa sit?, ett? prosessi ei vapauta resurssejaan odottaessaan lis?resurssien vapautumista.
- Silmukkaodotusehto. T?m? tarkoittaa sit?, ett? prosessit odottavat toisiaan silmukassa, eli prosessi A odottaa prosessin B varaamaa resurssia ja p?invastoin.
Koska yhdenkin ehdon rikkominen riitt?? est?m??n lukkiutumiset, ei kaikkia ehtoja tarvitse est??. Esimerkiksi virtuaalimuistij?rjestelm? rikkoo irrottamattomuusehtoa: k?ytt?j?rjestelm? voi vapauttaa keskusmuistia ilman prosessin my?t?vaikutusta. N?in keskusmuistin loppuminen kesken ei voi aiheuttaa j?rjestelm?n lukkiutumista. Sovelluksissa on tyypillist? varata resurssit aina samassa j?rjestyksess?, jolloin silmukkaodotusehto ei voi toteutua. Varjopuolena on se, ett? osa varauksista joudutaan t?ll?in tekem??n liian aikaisin.
Lukkiutumista muistuttavia ongelmia ovat n?lkiintyminen (engl. starvation) ja livelock.[1]
Katso my?s
[muokkaa | muokkaa wikiteksti?]L?hteet
[muokkaa | muokkaa wikiteksti?]- Ilkka Haikala ja Hannu-Matti J?rvinen: K?ytt?j?rjestelm?t (luku 3). Talentum 2003. ISBN 951-762-837-4
Viitteet
[muokkaa | muokkaa wikiteksti?]- ↑ Starvation and Livelock docs.oracle.com. Viitattu 23.11.2019. (englanniksi)