Problemet med den sovende barber

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 24. juli 2021; verifikation kræver 1 redigering .

Inden for datalogi er problemet med den sovende frisør  et klassisk synkroniserings- og interproceskommunikationsproblem i et multitasking -operativsystem . Udfordringen ligger i at sikre, at frisøren arbejder, når der er kunder og hviler, når der ikke er kunder.

Problem

Analogien er baseret på en hypotetisk barbershop med én barber. Frisøren har én arbejdsplads og et receptionslokale med flere stole. Når frisøren er færdig med at klippe klientens hår, slipper han klienten og går derefter til receptionsområdet for at se, om der er nogle ventende klienter. Hvis de er, inviterer han en af ​​dem og klipper sit hår. Er der ingen ventende kunder, går han tilbage til sin stol og sover i den.

Hver kunde, der kommer, ser på, hvad frisøren laver. Hvis frisøren sover, vækker klienten ham og sætter sig i en stol. Hvis frisøren arbejder, så går klienten til receptionen. Hvis der er en ledig stol i venteværelset, sætter klienten sig ned og venter på deres tur. Hvis der ikke er en ledig stol, så går klienten. Ud fra en naiv analyse skal ovenstående beskrivelse sikre, at barbershoppen fungerer korrekt med, at frisøren klipper alle, der kommer ind, mens der er kunder, og så sover, indtil den næste kunde kommer. I praksis er der flere konfliktsituationer, der illustrerer de generelle problemer i planlægningen.

Alle disse konfliktsituationer hænger sammen med, at både frisørens og klientens handlinger (tjekke venteværelset, gå ind i frisøren, tage plads i venteværelset osv.) tager en ukendt tid og/eller kan forekomme samtidigt. For eksempel kan en kunde komme ind og bemærke, at frisøren arbejder, så går han i receptionen. Mens han går, afslutter frisøren den klipning, han er i gang med, og går for at tjekke venteværelset, og det gør det hurtigere end kunden, der er på vej dertil. Da der endnu ikke er nogen i receptionen (klienten er endnu ikke nået), vender han tilbage til sin plads og sover. Frisøren venter nu på klienten, og klienten venter på frisøren. I et andet eksempel kan to kunder ankomme på samme tid, når der kun er én ledig plads i receptionen. De bemærker, at frisøren er på arbejde, går hen i venteværelset, og begge forsøger at tage den eneste stol.

Problemet med den sovende barber tilskrives ofte Edsger Dijkstra (1965), en af ​​datalogiens pionerer.

Løsning

Der er flere mulige løsninger på dette problem. Hovedelementet i hver af løsningerne er en mutex  - en mekanisme, der sikrer, at kun én af deltagerne kan ændre tilstanden et givet tidspunkt. Barberen skal erhverve mutex'en, før han tjekker klienterne, og frigive den, når han begynder at sove eller arbejde. Klienten skal erhverve sig samme mutex, inden han går ind i frisøren, og frigive den, så snart han tager plads enten i receptionen eller hos frisøren. Dette løser begge problemer nævnt i det foregående afsnit. Det er også muligt at bruge den mere generelle semaformekanisme til at angive systemets aktuelle tilstand. For eksempel kan du ved hjælp af en semafor udtrykke antallet af personer i venteværelset.

Varianten af ​​flere frisører af det samme problem har den yderligere kompleksitet, at koordinere flere frisører blandt ventende kunder.

Se også

Links