Forum: Offtopic Semaphore Problem


von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Hallo
Ich blicke bei obiger Übungsaufgabe einfach nicht durch was da genau 
gemacht wird. Ich habe die Semaphore (binäre) so verstanden:

Mit down(mutex) wird die Semaphore erhöht bzw. verringert, so dass alle 
anderen Prozesse, die ebenfalls down(mutex) aufrufen schlafen gelegt 
werden.
Mit up(mutex) wird dann der nächste anstehende Prozess, der bei 
down(mutex) eingeschlafen ist, wieder aufgeweckt.

Nun zu 1.) Es gibt ja hier keine Priorität oder sonstiges, welcher 
Prozess zeichnet jetzt zuerst? Zeichnen etwa alle gleichzeitig, dann 
komme ich auch auf die Koordinate (2,0), das würde ja aber dem down() 
up() Konzept wiedersprechen?

Zu 2.) Damit das Haus korrekt gezeichnet wird muss doch folgende Abfolge 
ablaufen: A1,A2,A5,A6,A4,A1,A3,A2

In der Lösung wird ja jetzt schon in der Zeile 205 A1, A1, A5 
gleichzeitig ausgeführt, da ja kein down(s1) bei P1 und P3 ausgeführt 
wird, oder? Da kommt man ja niemals auf das Haus?

Was habe ich bei den Semaphoren derart missverstanden?

Gruss Bert

von Purzel H. (hacky)


Lesenswert?

Eine binaere Semaphore, eine Variable, ist gelockt(0) oder nicht 
gelockt(1). Wenn sie entlockt wird, bekommt der naechste Prozess, der 
auf die Semaphore wartet den Zugriff. Der Naechste bedeutet, der 
Naechste in der Warteschlange. Ob die nun priorisiert ist, oder nicht 
ist erst mal egal.
Eine nicht binaere, N-wertige Semaphore kann N parallele Zugriffe 
zulassen. Dabei wird hinuntergezaehlt bis Null, dann ist sie fuer andere 
Prozesse gesperrt.
Wait(semaphore) wartet auf ungleich Null und dekrementiert dann. Dann 
geht der code weiter.
Signal(Semaphore) incrementiert und gibt die Semaphore wieder frei.

Eine Mutex (=mutually exclusive) ist ein Codebereich, der nur von einem 
Prozess auf's Mal ausgefuehrt werden darf.

Begin(Mutex)
 ..
 ..
End(Mutex)

von Bert S. (kautschuck)


Lesenswert?

Ok, vielen Dank, habe das mit der Null Initialisierung der Semaphore 
falsch interpretiert, dachte die kann auch auf 1 erhöht werden und dann 
blockiert.

Gruss Bert

von Purzel H. (hacky)


Lesenswert?

Sorry. Die obig beschriebene Funktionalitaet des geschuetzten 
Codebereiches nennt sich "Critical Section"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.