În informatică , problema frizerului adormit este o problemă clasică de sincronizare și comunicare între procese într- un sistem de operare multitasking . Provocarea constă în a ne asigura că frizerul lucrează când există clienți și se odihnește când nu există clienți.
Analogia se bazează pe o frizerie ipotetică cu un frizer. Coaforul are un loc de muncă și o sală de recepție cu mai multe scaune. Când coaforul termină de tuns clientul, îl eliberează pe client și apoi se duce în zona de recepție pentru a vedea dacă sunt clienți în așteptare. Dacă sunt, îl invită pe unul dintre ei și își tunde părul. Dacă nu sunt clienți în așteptare, se întoarce pe scaun și doarme în el.
Fiecare client care vine se uită la ce face frizerul. Daca coaforul doarme, clientul il trezeste si se aseaza pe un scaun. Dacă coaforul lucrează, atunci clientul merge la recepție. Dacă în sala de așteptare există un scaun liber, clientul se așează și își așteaptă rândul. Dacă nu există scaun liber, atunci clientul pleacă. Pe baza unei analize naive, descrierea de mai sus ar trebui să se asigure că frizeriei funcționează corect, frizerul tăind pe oricine vine în timp ce există clienți și apoi dormind până sosește următorul client. În practică, există mai multe situații conflictuale care ilustrează problemele generale ale planificării.
Toate aceste situații conflictuale sunt legate de faptul că acțiunile atât ale coaforului, cât și ale clientului (verificarea sălii de așteptare, intrarea în coafor, luarea unui loc în sala de așteptare etc.) durează un timp necunoscut și/sau poate apărea simultan. De exemplu, un client poate intra și observa că coaforul lucrează, apoi se duce la recepție. În timp ce merge, coaforul termină tunsoarea pe care o face și merge să verifice sala de așteptare, și o face mai repede decât clientul care se îndreaptă acolo. Întrucât încă nu este nimeni în recepție (clientul nu a ajuns încă), se întoarce la locul său și doarme. Coaforul asteapta acum clienta, iar clientul il asteapta pe coafor. Într-un alt exemplu, doi clienți pot ajunge în același timp când în zona recepției este disponibil un singur loc. Observă că frizerul este la serviciu, merg în sala de așteptare și amândoi încearcă să ocupe singurul scaun.
Problema frizerului adormit este adesea atribuită lui Edsger Dijkstra (1965), unul dintre pionierii informaticii.
Există mai multe soluții posibile la această problemă. Elementul principal al fiecăreia dintre soluții este un mutex - un mecanism care asigură că doar unul dintre participanți poate schimba starea la un moment dat. Frizerul trebuie să achiziționeze mutexul înainte de a verifica clienții și să-l elibereze atunci când începe fie să doarmă, fie să lucreze. Clientul trebuie sa achizitioneze acelasi mutex inainte de a intra in coafor, si sa-l elibereze imediat ce se aseaza fie in zona de receptie, fie la coafor. Acest lucru rezolvă ambele probleme menționate în secțiunea anterioară. De asemenea, este posibil să se utilizeze mecanismul semaforului mai general pentru a indica starea curentă a sistemului. De exemplu, folosind un semafor, puteți exprima numărul de persoane din sala de așteptare.
Varianta de coafor multiplu a aceleiasi probleme are complexitatea suplimentara de a coordona mai multe coafore intre clientii in asteptare.