Lukkiuma on tila, jossa kaksi tai useampi säie kukin odottaa ikuisesti resurssia, jota muut pitävät, joten yksikään ei pääse etenemään. Se vaatii neljän ehdon täyttymistä samanaikaisesti (Coffmanin ehdot).
Lukkiuma on tila, jossa kaksi tai useampi säie kukin odottaa ikuisesti resurssia, jota muut pitävät, joten yksikään ei pääse etenemään. Se vaatii neljän ehdon täyttymistä samanaikaisesti (Coffmanin ehdot).
Riko mikä tahansa yksi, ja lukkiuma on mahdoton.
Säie 1 pitää A:ta, haluaa B:tä ─┐
├─ kehäodotus → lukkiuma
Säie 2 pitää B:tä, haluaa A:ta ─┘
# LUKKIUMA: säikeet lukitsevat vastakkaisissa järjestyksissä
def t1():
with lockA:
with lockB: ... # T1: A sitten B
def t2():
with lockB:
with lockA: ... # T2: B sitten A ← sykli!
# KORJAUS: pakota globaali lukkojärjestys (aina A ennen B:tä)
def safe():
with lockA:
with lockB: ... # kaikki hankkivat samassa järjestyksessä
tryAcquire(timeout), peräänny ja yritä uudelleen — rikkoo pidä-ja-odota-ehdon.Lukkiumat jäädyttävät järjestelmiä hiljaisesti — ei kaatumista, vain jumiutuneita pyyntöjä. Neljän ehdon nimeäminen osoittaa, että osaat päätellä miksi se tapahtuu ja valita kohdennetun ehkäisyn (yleensä johdonmukaisen lukkojärjestyksen), sen sijaan että ripottelisit lukkoja ja toivoisit.
Kirjasto IT-haastattelukysymyksiä yksityiskohtaisine vastauksineen — Juniorista Senioriin.
Lahjoita