Pereiti prie turinio

Suktukinis rakinimas

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.

Suktukinis rakinimas[1] (angl. spin locking) – algoritmas, kuriame reikiamo pasikeitimo (dažniausiai leidimo dirbti su sinchronizuota duomenų struktūra) laukiama uždarame cikle nuolat tikrinant esamą padėtį:

while (!galima_testi)
 {
 }

Suktukinis rakinimas paprastai laikomas klaida, nes tokia gija laukdama eikvoja daug procesoriaus laiko, labai lėtindama kitų tuo metu vykdomų gijų darbą. Pavyzdžiui, jei tokiame cikle laukiama vartotojo duomenų įvedimo, tokia programa stabdo kitas lygiagrečiai toje pat operacinėje sistemoje veikiančias programas. Toks rakinimas leistinas tik tais atvejais, kuomet neabejotinai žinoma, jog laukimas ilgai netruks.

Jei reikia laukti ilgesnį laiką, būtina naudotis įvairiomis laukimo bei laukimo nutraukimo komandomis, kurias turi daugelis kalbų. Šių komandų veikimas yra kitoks ir jų vykdymo metu laukiama procesoriaus resursų nenaudojant.

Tokio netinkamo rakinimo formaliai negalima aptikti jokiais testais (nebent matuojant lygiagrečiai vykdomų procesų darbo greitį). Tačiau daugelis operacinių sistemų turi metodus sužinoti dabartinei procesoriaus apkrovai. Jei programai tiesiog laukiant operacinė sistema rodo ją naudojant arti šimto procentų procesoriaus laiko, galima įtarti, jog programoje yra nevykusiai užprogramuotas laukimo algoritmas.

  1. Gert Boddaert (2000). User-Level Spin Locks - Threads, Processes & IPC. [1]