Frage zu Semaphore

Hi an alle

Vielleicht kann mir von euch jemand weiterhelfen ?

Die Aufgabe lautet dass man mit Hilfe von Semaphoren folgende Prozess Reihenfolge erzwingern soll: P1 – (P2 oder P3) – P1 – (P2 oder P3)…

Kann das mit folgender Loesung funktionieren ?

seminit (A, 1);
seminit (B. 0);

P1() {
while(true) {
P(A);
krit. Abschnitt;
V(B);
}
}

P2() {
while(true) {
P(B);
krit. Abschnitt;
V(A);
}
}

P3() {
while(true) {
P(B);
krit. Abschnitt;
V(A);
}
}

Eigentlich muesste das doch hinhauen, oder ?
Danke, schon mal fuer Antworten.
Gruss Claudia

Sorry, so klappt das nicht.

Du mußt ja sicherstellen, dass P2/P3 nicht eintreten kann, wenn P1 aktiv ist!
Aber der Ansatz ist schon richtig. Du brauchst 2 Semaphoren.

Vielleicht so:

Semphoren sind A und B (binäre Semaphoren)!

seminit (A, 1);
seminit (B. 1);

P1() {
while(true) {
P(A);
krit. Abschnitt;
V(A);
}
}

P2() {
while(true) {
P(A);
P(B);
krit. Abschnitt;
V(B);
V(A);
}
}

P3() {
while(true) {
P(A);
P(B);
krit. Abschnitt;
V(B);
V(A);
}
}

Hm, Problem könnte sein, wenn P1 V(a) aufruft, dann P2 eintritt und P3 eintreten will. Dann würde bei V(a) von P2 sofort P3 aktiv werden…
Vielleicht hilft es ja trotzdem…

Gruß
Alex