Tietojenkäsittelytieteessä nukkuva parturi -ongelma on klassinen synkronointi- ja prosessien välinen kommunikaatioongelma moniajokäyttöjärjestelmässä . Haasteena on varmistaa, että kampaaja työskentelee, kun asiakkaita on, ja lepää, kun asiakkaita ei ole.
Analogia perustuu hypoteettiseen parturiin, jossa on yksi parturi. Kampaajalla on yksi työpaikka ja vastaanottohuone, jossa on useita tuoleja. Kun kampaaja lopettaa asiakkaan hiusten leikkaamisen, hän vapauttaa asiakkaan ja menee sitten vastaanottoalueelle katsomaan, onko odottavia asiakkaita. Jos he ovat, hän kutsuu yhden heistä ja leikkaa hiuksensa. Jos odottavia asiakkaita ei ole, hän palaa tuoliinsa ja nukkuu siinä.
Jokainen saapuva asiakas katsoo mitä kampaaja tekee. Jos kampaaja nukkuu, asiakas herättää hänet ja istuu tuolille. Jos kampaaja on töissä, niin asiakas menee vastaanottoon. Jos odotushuoneessa on vapaa tuoli, asiakas istuu alas ja odottaa vuoroaan. Jos vapaata tuolia ei ole, asiakas lähtee. Naiiviin analyysiin perustuen yllä olevan kuvauksen oletetaan varmistavan, että parturi toimii oikein, kun parturi leikkaa jokaisen sisääntulevan kun asiakkaita on ja sitten nukkuu kunnes seuraava asiakas saapuu. Käytännössä on useita konfliktitilanteita, jotka kuvaavat suunnittelun yleisiä ongelmia.
Kaikki nämä konfliktitilanteet liittyvät siihen, että sekä kampaajan että asiakkaan toimet (odotushuoneen tarkastaminen, kampaajaan sisäänpääsy, odotushuoneessa istuminen jne.) vievät tuntemattoman kauan ja/tai voi esiintyä samanaikaisesti. Esimerkiksi asiakas voi tulla sisään ja huomata, että kampaaja on töissä, ja sitten hän menee vastaanottoon. Kävellessään kampaaja viimeistelee tekemänsä hiustenleikkauksen ja menee tarkistamaan odotushuoneen, ja tekee sen nopeammin kuin sinne suuntaava asiakas. Koska vastaanotossa ei ole vielä ketään (asiakas ei ole vielä saapunut), hän palaa paikalleen ja nukkuu. Kampaaja odottaa nyt asiakasta ja asiakas odottaa kampaajaa. Toisessa esimerkissä kaksi asiakasta voi saapua samaan aikaan, kun vastaanottoalueella on vain yksi paikka vapaana. He huomaavat, että kampaaja on töissä, menevät odotushuoneeseen ja yrittävät kumpikin ottaa ainoan tuolin.
Nukkuvan parturin ongelma johtuu usein Edsger Dijkstrasta (1965), yhdestä tietojenkäsittelytieteen pioneereista.
Tähän ongelmaan on useita mahdollisia ratkaisuja. Jokaisen ratkaisun pääelementti on mutex - mekanismi, joka varmistaa, että vain yksi osallistujista voi muuttaa tilaa tietyllä hetkellä . Parturi hankkii mutexin ennen asiakkaiden tarkastamista ja vapauttaa sen, kun hän alkaa joko nukkua tai työskennellä. Asiakkaan tulee hankkia sama mutex ennen kampaajalle tuloa ja vapauttaa se heti, kun hän ottaa paikan joko vastaanottoalueella tai kampaajalla. Tämä korjaa molemmat edellisessä osiossa mainitut ongelmat. On myös mahdollista käyttää yleisempää semaforimekanismia ilmaisemaan järjestelmän nykyinen tila. Esimerkiksi semaforin avulla voit ilmaista odotushuoneessa olevien ihmisten määrän.
Saman ongelman usean kampaajan versiolla on monimutkaisempi koordinointi useiden kampaajien kesken odottavien asiakkaiden kesken.