Aufgabe 8


ich hab 2 semaphoren, die eine zeigt an wieviel noch geschrieben werden darf, die andere wieviel gelesen werden darf. bei einer semaphore weißt du ja nicht ob du jetzt alles auslesen darfst, oder alles vollschrieben kannst … ausser du regelst den punkt unabhängig von den semaphoren…


man kann ja eine semaphore für die freien plätze und eine für die belegten plätze machen. am ende zieht der erzeuger dann von den freien plätzen einfach die puffergrösse ab, was dazu führt dass semop so lang blockiert bis halt der puffer komplett frei ist…


ich meinte eigentlich zusaetzlich zu den beiden, die du gerade beschrieben hast :].
im moment habe ich also 3 semaphoren - 1 fuer lesbare zeichen, 1 fuer schreibbare zeichen und 1 fuer den exclusiven zugriff auf den speicher. so hat es der sebbi beschrieben und so steht auch ein beispiel im skript.
bloss wozu sollte ich eine 4. semaphore brauchen, wie es frahi angedeutet hat?


hab ich angedeutet, dass man 4 braeuchte? das waer mir neu, ich hab gesagt, dass du beim verbrauchen/erzeugen die 2 Probleme haben kann,

  • dass der schreiber was schreibt, was der leser noch nicht gelesen hat und
  • dass der leser erst dann was lesen kann, wenn der schreiber schon fertig ist

Ein exklusiver Zugriff im Sinne von einer Sperrvariable ist dann nicht unbedingt notwendig, schlieslich greifen Leser und Schreiber immer nur auf Elemente zu, auf die sie das problemlos duerfen.

Allerdings vielleicht noch so als Denkanreiz: Was passiert, wenn -nachdem der Verbraucher beendet wurde- 2 neue genau gleichzeitig gestartet werden?


(ok, etwas spät der Beitrag)

Im Prinzip reicht ja eine binäre Semaphore (welcher Genus hier auch immer richtig sein mag), welcher den Zugriff auf den gemeinsamen Speicher regelt.
Das funktioniert.

Die Sache mit der Schreib- und dem Lesesemaphore hat eben den Vorteil, dass durchaus gleichzeitig geschrieben und gelesen werden kann, solange eben sichergestellt ist, dass ungelesene Daten nicht überschrieben, und ungeschriebene Daten nicht gelesen werden können.

Allerdings braucht man eben noch eine binäre Semaphore (ich hab das bei der 2-Semaphoren-Variante als dritte implementiert) die den Zugriff auf das shm-segment regelt, solange geprüft wird, ob schon ein anderer Verbraucher am Start ist.

Sonst könnten nämlich mehrere Verbraucher schön der Reihe nach sehen, “aha, da steht -1”, und schön der Reihe nach ihre PID reinhauen (im dümmsten Fall), und das wäre ziemlich olum

Grammatik: mangelhaft (ja sorry, sag mir doch mal jemand, ob die einzahl von Semaphoren männlich, weiblich oder sonstwas, oder andorianisch ist)


Dito! Es ist durchaus sinnvoll, eine 3-teilige Semaphore zu verwenden (bzw. drei einzelne). Eine, um den Lesezugriff auf den Ringpuffer zu koordinieren, eine für den Schreibzugriff auf denselben und eine für den exklusiven Zugriff auf die Verwaltungsstruktur.


hmmm?
ich hab halt 2 Semaphoren, dass sich leser und schreiberling net überholen können und eine 3., dass nicht 2 leser gleichzeitig ne pid neischreiben…


Sag ich doch…