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:
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]