Vyšlo v týdeníku Computerworld č. 40/92 v roce 1992
Vytištěno z adresy: http://www.earchiv.cz/a92/a240c120.php3

Deadlock

Tu situaci jistě znáte i ze svého života: stojí-li proti sobě dva navzájem se vylučující požadavky, není možné vyhovět ani jednomu z nich. Konkrétních podob lze najít hodně - například dvě auta, která vjedou proti sobě do úzké uličky, ve které se nemohou vyhnout - dva lidé, kteří chtějí získat výlučně pro sebe předmět, dostupný jen v jediném exempláři - dvě politické reprezentace, které ... (ale to sem raději nezatahujme).

Řešení těchto zdánlivě bezvýchodných situací (pomineme-li ty politické), mohou být v zásadě dvojího druhu: preventivní, snažící se zamezit tomu, aby příslušná situace vůbec vznikla, a dále takové, které problém řeší až poté, co k němu došlo. Ilustrujme si to právě na příkladu úzké cesty, kde nemohou projet dvě auta vedle sebe. Preventivní řešení by spočívalo v zavedení semaforů na oba konce této úzké cesty, zatímco druhý typ řešení by spočíval v určení toho, kdo má v případě ucpání cesty ustoupit - tj. které auto má vycouvat, respektive dát druhému autu přednost.

Může ale k podobným situacím docházet i v souvislosti s výpočetní technikou? Může, a to nejen tehdy, když se dva lidé "perou" o jeden počítač. Vraťme se na chvíli do doby děrných štítků a představme si víceúlohový operační systém, ve kterém jedna úloha právě tiskne na tiskárně, a náhle si vzpomene, že chce pracovat ještě i se snímačem děrných štítků. Ten však právě používá jiná úloha, která ale zase čeká, až bude mít možnost si něco vytisknout také na tiskárně. A jelikož s každým z těchto zařízení může vždy pracovat jen jediná úloha, a žádná z našich dvou úloh nehodlá "pustit" to zařízení, které již jednou získala, máme zde přímo učebnicový příklad vzájemného zablokování. Existuje pro něj dokonce i velmi přesné pojmenování: deadlock, případně též: deadly embrace (česky pak: smrtelné objetí).

Také zde jsou v principu možné dva druhy řešení: preventivní by znamenalo, že každá úloha musí požádat operační systém najednou o všechna zařízení, se kterými chce pracovat, a která nemohou být sdílena více úlohami současně (tj. nesmí později přijít s dalším požadavkem, který by pak mohl vést ke vzniku smrtelného objetí). Alternativou je možnost odebrat již dříve přidělené zařízení až v okamžiku, kdy ke smrtelnému objetí skutečně dojde - například na základě priorit jednotlivých úloh či jiných kritérií.

Možnost vzniku smrtelného objetí není samozřejmě výhradní doménou děrnoštítkových počítačů. Například ve výpočetním systému s architekturou klient-server může dojít k tomu, že klient čeká na data od serveru, ale ten mu nic neposílá proto, že naopak sám čeká na data od svého klienta - tato varianta smrtelného objetí bývá někdy označována jako starvation deadlock (česky nejspíše: vzájemné vyhladovění).

Jiným příkladem může být taková situace při vzájemné komunikaci dvou zařízení, ve které se každé z nich snaží vysílat, ale druhé nic nepřijímá, neboť má plné vstupní vyrovnávací paměti (tzv. buffery), a nemůže je vyprázdnit, protože čeká na úspěšné odeslání svých dat. Této variantě se pak říká také constipation (zácpa).