Weiß jemand, wie ich die lock und conditions in java hier zu programmieren habe?

2 Antworten

Das ist bei einem ändernden Zugriff
   * nur dann der Fall, wenn andere Threads die entsprechende Variable
   * zeitgleich lesen oder schreiben können.

Naja, wie man es nimmt. Der Cache muss ja auch rausgeschrieben und aus dem Hauptspeicher gelesen werden und das tut der nicht von selbst, sondern nur, bei Anfrage bzw. Freigabe eines Locks (was von beiden genau müsste man nachschauen).
Oder man macht die betreffenden variablen "volatile".

Entsprechend kann ich dir auch keine Lösung anbieten, denn dann müsste ich öfters Locks benutzen, als es dir Aufgabenstellung fordert.

Mit "Anzeigen, dass ein Schreiber wartet" ist einfach gemeint, dass du die Variable this.writer auf true setzen sollst.

So ganz weiß ich aber nicht, wie sich dein Dozent das vorgestellt hat. Wenn du z.B. die Anzahl der Leser erhöhst oder "erniedrigst", ist das auch jeweils ein schreibender Zugriff auf eine gemeinsame Variable, den du mit einem Lock oder einem synchronized umschließen musst.

Außerdem muss man noch aufpassen, dass nicht mehrere Schreiber gleichzeitig aufgerufen werden können.

Normalerweise würde man für sowas ein ReadWriteLock benutzen, was genau dafür gedacht ist, dass mehrere Leser ein Lock erwerben können, solange kein Schreiber aktiv ist und dass immer nur ein Schreiber auf einmal ein Lock erwerben kann, solange kein Leser aktiv ist.