한국   대만   중국   일본 
Rakinimo aklaviet? ? Vikipedija Pereiti prie turinio

Rakinimo aklaviet?

Straipsnis i? Vikipedijos, laisvosios enciklopedijos.
    ?iam straipsniui ar jo daliai tr?ksta i?na?? ? patikimus ?altinius .
J?s galite pad?ti Vikipedijai prid?dami tinkamas i?na?as su ?altiniais.
    ?? straipsn? gali b?ti gana sunku suprasti be papildom? informacijos ?altini?.
Galite perra?yti d?stomus teiginius pla?iau ir suteikiant daugiau konteksto.

Rakinimo aklaviet? ( angl. deadlock ) ? pad?tis, kuomet dvi gijos abi laukia viena kitos atliekant kok? nors veiksm?. Kadangi abi gijos yra laukimo re?ime, jokie laukiami veiksmai neatliekami ir ?i pad?tis gali trukti neribot? laik?.

Tai pana?u ? du pie??jus, kurie pie?ia vienu pie?tuku ant vieno popieriaus lapo ir gali perduoti pie?imo ?rankius tik nupie?? savo dal? [reikalingas ?altinis] . Jei atsitinka taip, jog vienas ?aid?jas turi tik pie?tuk?, o kitas tik popieri?, n? vienas i? j? negali atlikti pie?imo veiksmo ir atiduoti turimo pie?imo ?rankio. Taigi, nekei?iant ?aidimo taisykli?, tokia pad?tis gali trukti am?inai.

Rakinimo aklavietei pasireik?ti b?tinos ?ios s?lygos

  • Rakinamas resursas visada priklauso tik vienai gijai.
  • Gija, jau turinti rakinam? resurs?, gali pra?yti j? daugiau (tur?ti tik vien? resurs? ir su juo apsieiti yra saugu).
  • Negalima resurso i? gijos atimti ?j?ga“ ? resurs? atlaisvinti kitiems gali tik jo dabartinis savininkas.
  • Dvi gijos gali tuo pat metu laukti resurs?, kurios abiem atvejais turi antroji pus?.

?ias s?lygas 1971 m. suformulavo E. G. Coffman.

Programa , kurioje pasirei?kia ?i klaida , gali netik?tai apskritai sustoti. Kas ir kod?l atsitiko, paprastai nustatyti b?na labai sunku. Kai kurios vykdymo sistemos tokiu atveju ? sutart? klaviat?ros klavi?? kombinacij? ( java sistemoje ctrl - break) atsako i?vardindamos visas tuo metu ka?ko laukian?ias gijas.

Vengimo b?dai [ redaguoti | redaguoti vikitekst? ]

  • Panaikinti i?imtin?s resurso nuosavyb?s b?tinyb? ir kurti j? tok?, jog skirtingos gijos gal?t? juo dalintis. Tai paprastas ir akivaizdus sprendimas, deja, ne visada ?manomas.
  • Reikalauti, jog gija gal?t? gauti reikaling? resurs? rinkin? tik tada, jei ji ?iuo metu nekontroliuoja joki? rakinam? resurs?. Jei v?liau reikalingi kiti ar daugiau resurs?, prie? to pra?ant turi b?ti gr??inti visi turimieji.
  • Sukurti gij? hierarchij?, jog ?auk?tesn?s kastos“ gija visada gal?t? ?j?ga atimti“ jai reikaling? resurs?. Tai irgi da?nai sunku ?vykdyti, nes ne visada ai?ku kokie tokiu atveju tur?t? b?ti v?lesni ??emesniosios“ gijos atliekami veiksmai. Be to, klaid? gali b?ti ir ?auk?tesniosios gijos“ vykdomame algoritme . Jei gij? hierarchij? visgi m?ginama kurti, kai kada tie hierarchiniai lygmenys priskiriami tiesiog atsitiktine tvarka.

Gyvoji aklaviet? [ redaguoti | redaguoti vikitekst? ]

Gyvoji aklaviet? (angl live deadlock ) susidaro kuomet dvi gijos bando imtis koki? nors veiksm? problemai spr?sti, ta?iau ?ie veiksmai pakartotinai ir v?l sukuria aklaviet?, nes abiej? pusi? atliekami vienu metu. Tai analogi?ka gyvenimo situacijai, kuomet, siaurame koridoriuje susitik? ?mon?s gali abu vienu metu pasitraukti kair?n, po to abu vienu metu de?in?n ir v?liau abu vienu metu sustoti vietoje, laukdami kitos pus?s pasitraukiant. Gyvosios aklaviet?s vengiama programuojant, kur reikia, atsitiktinius vengimo veiksmus (nagrin?jamame pavyzdyje, kaip ir realioje visuomen?je, abiej? pusi? pasitraukimo kryptis turi b?ti atsitiktin?).