Friseure 2. Frage

Muss ein Friseur seine Existenz/ Bereitschaft wirklich innerhalb der Mutex ankündigen?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Friseure 2. Frage
Hallo,

auf D-120 steht zum Thema “Schlafende Friseure” ja folgender Code (&-Operator weggelassen):

P(customers) P(mutex) waiting-- V(barbers) V(mutex)

muss wirklich V(barbers) vor V(mutex) stehen? Oder geht es nicht auch umgekehrt - also:

P(customers) P(mutex) waiting-- V(mutex) V(barbers)

Ich sehe nicht so ganz den Grund, V(barbers) noch durch eine Mutex abzusichern - schliesslich ist sie nur dazu da waiting zu schützen.

/EDIT: Ich vermute inzwischen, dass die Sequenz “Friseur ist bereit aka V(barbers)” und “es wird eine Warteplatz frei, da ein Kunde bearbeitet wird” atomar sein muss. Richtig?


Hier (http://www4.informatik.uni-erlangen.de/Lehre/WS03/V_SP1/Pruefung/) steht, dass schlafende Friseure nicht klausurrelevant sind

Da WELL '4


Ausgezeichnet. :cheesy:

Aber wenn ich schon so viel Energie reingesteckt habe, würde ich dennoch gerne die richtige Antwort wissen. :anx:


Also in der Klausur kommt’s auf jeden Fall nicht dran.

Hab’ jetzt aber auch 'ne Weile drueber gehirnt.
Was kann passieren wenn man’s umdreht:
Barber macht V(mutex) => evtl. am Eingang wartendender zweiter Kunde
kann sein P(mutex) machen. Wainting hat der Barber schon runtergezaehlt
(d.h. der zweite Kunde kann sich auf jeden Fall hinsetzen), er
hat aber noch nicht begonnen die Haare zu schneiden. Das passiert ja
erst beim V(barbers) weil dadurch der erste Kunde, der im P(barbers)
haengengeblieben ist, wieder deblockiert wird.
Es ist jetzt die Frage, in welchem Zustand ist dieser erste Kunde.
Noch wartend? Sein Warteplatz ist aber schon freigegeben und der
zweite Kunde hat ihn eingenommen.
Er steht also irgendwo rum und wartet dass er sich auf den Frisoerstuhl
setzen darf? Ist das ein definierter Zustand?

Spaetestens an so einer Stelle werden solche Geschichten zur Illustration
eines Koordinierungsproblems reichlich unbrauchbar.
Ich hab’s mir auch nochmal an einem realistischeren Szenario durchdacht -
da passiert einem auch nix. Aber
Also man kann’s wohl problemlos umdrehen.

Aber wir werden die Problematik mit Bearbeitern und Auftraegen
und wie man das sinnvoll synchronisiert kuneftig besser an einem anderen
Beispiel bringen und auch die Synchronisation etwas realitaetsnaeher
beschreiben.
Das Problem kommt ja wirklich vor (gar nicht so selten) - aber die Synchronisation in der
Praxis macht man natuerlich mit sleep/wakeup-Mechanismen und ordentlichen
Warteschlangen. Letzlich reicht einem da dann ein einzelner mutex-lock.


man dankt für die Antwort.