V informatice je problém spícího holiče klasickým problémem synchronizace a meziprocesové komunikace v multitaskingovém operačním systému . Úkolem je zajistit, aby kadeřník pracoval, když jsou klienti, a odpočíval, když klienti nejsou.
Přirovnání je založeno na hypotetickém holičství s jedním holičem. Kadeřnictví má jedno pracoviště a přijímací místnost s několika židlemi. Když kadeřník ukončí stříhání klienta, klienta pustí a poté se jde na recepci podívat, zda tam nejsou nějací klienti. Pokud ano, pozve jednoho z nich a ostříhá ho. Pokud tam nejsou žádní čekající zákazníci, vrátí se do svého křesla a spí v něm.
Každý klient, který přijde, se dívá na to, co kadeřník dělá. Pokud kadeřník spí, klient ho probudí a posadí se do křesla. Pokud kadeřník pracuje, tak klient jde na recepci. Pokud je v čekárně volná židle, klient si sedne a čeká, až na něj přijde řada. Pokud není volná židle, klient odchází. Na základě naivní analýzy má výše uvedený popis zajistit správné fungování holičství, kdy holič ostříhá každého, kdo přijde, dokud jsou zákazníci, a pak spí, dokud nepřijde další zákazník. V praxi existuje několik konfliktních situací, které ilustrují obecné problémy plánování.
Všechny tyto konfliktní situace souvisejí s tím, že jednání kadeřníka i klienta (kontrola čekárny, vstup do kadeřnictví, usazení se v čekárně atd.) zabere neznámou dobu a/nebo může nastat současně. Klient může například přijít a všimnout si, že kadeřník pracuje, pak jde na recepci. Kadeřník při chůzi dokončí stříhání, které dělá, a jde se podívat do čekárny, a to rychleji než klient tam mířící. Protože v recepci ještě nikdo není (klient ještě nedošel), vrací se na své místo a spí. Kadeřník nyní čeká na klienta a klient čeká na kadeřníka. V jiném příkladu mohou dva zákazníci dorazit ve stejnou dobu, když je v prostoru recepce k dispozici pouze jedno místo. Všimnou si, že je kadeřník v práci, jdou do čekárny a oba se snaží zaujmout jedinou židli.
Problém spícího holiče je často připisován Edsgeru Dijkstrovi (1965), jednomu z průkopníků informatiky.
Existuje několik možných řešení tohoto problému. Hlavním prvkem každého z řešení je mutex – mechanismus, který zajišťuje, že pouze jeden z účastníků může v danou chvíli změnit stav . Holič musí získat mutex před kontrolou klientů a uvolnit ho, když začne spát nebo pracovat. Stejný mutex si klient musí pořídit před vstupem do kadeřnictví a uvolnit jej, jakmile se usadí buď v prostoru recepce nebo u kadeřníka. Tím jsou vyřešeny oba problémy uvedené v předchozí části. Pro indikaci aktuálního stavu systému je také možné použít obecnější mechanismus semaforu . Například pomocí semaforu můžete vyjádřit počet osob v čekárně.
Varianta stejného problému s více kadeřníky má další složitost spočívající v koordinaci více kadeřníků mezi čekajícími klienty.