Inom datavetenskap är problemet med den sovande frisören ett klassiskt problem med synkronisering och interprocesskommunikation i ett multitasking- operativsystem . Utmaningen ligger i att se till att frisören jobbar när det finns kunder och vilar när det inte finns några kunder.
Analogin bygger på en hypotetisk barbershop med en frisör. Frisören har en arbetsplats och ett mottagningsrum med flera stolar. När frisören är klar med att klippa kundens hår släpper han kunden och går sedan till receptionen för att se om det finns några väntande kunder. Om de är det, bjuder han en av dem och klipper sig. Om det inte finns några väntande kunder går han tillbaka till sin stol och sover i den.
Varje kund som kommer tittar på vad frisören gör. Om frisören sover väcker klienten honom och sätter sig i en stol. Om frisören arbetar går kunden till receptionen. Om det finns en ledig stol i väntrummet sätter sig klienten ner och väntar på sin tur. Om det inte finns någon ledig stol, lämnar klienten. Baserat på en naiv analys ska ovanstående beskrivning säkerställa att frisersalongen fungerar korrekt med att frisören klipper alla som kommer in medan det är kunder och sedan sover tills nästa kund kommer. I praktiken finns det flera konfliktsituationer som illustrerar planeringens allmänna problem.
Alla dessa konfliktsituationer är relaterade till att både frisörens och klientens agerande (kolla väntrummet, gå in i frisören, ta plats i väntrummet etc.) tar en okänd tid och/eller kan ske samtidigt. Till exempel kan en kund komma in och märker att frisören jobbar, sedan går han till receptionen. När han går avslutar frisören klippningen han håller på att göra och går för att kolla i väntrummet, och gör det snabbare än kunden som ska dit. Eftersom det inte finns någon i receptionen än (klienten har ännu inte nått) går han tillbaka till sin plats och sover. Frisören väntar nu på kunden, och kunden väntar på frisören. I ett annat exempel kan två kunder anlända samtidigt när det bara finns en plats tillgänglig i receptionen. De märker att frisören är på jobbet, går till väntrummet och båda försöker ta den enda stolen.
Problemet med den sovande barberaren tillskrivs ofta Edsger Dijkstra (1965), en av datavetenskapens pionjärer.
Det finns flera möjliga lösningar på detta problem. Huvudelementet i var och en av lösningarna är en mutex - en mekanism som säkerställer att endast en av deltagarna kan ändra tillstånd vid en given tidpunkt. Frisören måste skaffa mutex innan han kollar på klienter och släppa den när han börjar sova eller arbeta. Klienten måste skaffa samma mutex innan han går in i frisören och släppa den så fort han tar plats antingen i receptionen eller hos frisören. Detta löser båda problemen som nämndes i föregående avsnitt. Det är också möjligt att använda den mer allmänna semaformekanismen för att indikera systemets nuvarande tillstånd. Med hjälp av en semafor kan du till exempel uttrycka antalet personer i väntrummet.
Varianten med flera frisörer av samma problem har den extra komplexiteten att samordna flera frisörer bland väntande kunder.