Danke für deinen Vorschlag. Jedoch nach meinem Verständnis von Semaphoren macht das keinen Sinn. Vielleicht habe ich da aber auch ein Verständnisfehler. Andernfalls:
Semaphoren haben genauer gesagt einen Wert, keinen Zustand.
Man kann die p(sem) Funktion nicht von einem Wert abhängig machen.
p(sem) funktioniert so, dass wenn sem == 0, blockiert der Prozess, ansonsten wenn sem > 0, wird der sem um 1 niedriger gemacht und der Prozess blockiert nicht.
v(sem) erhöht einen sem einfach um +1
Mit der Lösung
P1: p(sem) schreiben(); v(sem)
P2: p(sem) lesen(); v(sem)
wäre zwar sichergestellt, dass nicht gleichzeitig gelesen und geschrieben werden kann. Aber es könnte z.B. 100 mal hintereinander geschrieben werden, ohne dass ein einziges mal gelesen wird.
Mit einem einzigen Semaphor kann man meiner Meinung nach nicht die sich abwechselnde Reihenfolge schreiben, lesen, schreiben, lesen, schreiben,... gewährleisten.
Genau das sagt die Musterlösung aber, und ich verstehe nicht wie das gehen soll.