Hi, ich beschäftige mich zurzeit mit lock und conditions.

public class LockedDataObject extends DataObject {


    /** Anzahl aktueller Leser */
    int noReaders;


    /** Wahr, wenn Schreiber momentan wartend oder schreibend */
    boolean writer;


    /**
     * Condition-Variable zum Schlafenlegen von bzw. Aufwecken des Schreibers
     */
    Condition condWrite;


    /** Condition-Variable zum Schlafenlegen bzw. Aufwecken der Leser */
    Condition condRead;


    /**
     * Sperre, um alle oberen Variablen zu schützen. Bevor auf eine der
     * Variablen zugeriffen wird, muss ggf. diese Sperre erworben werden. Der
     * Erwerb der Sperre soll *nur dann* erfolgen, wenn es für die korrekte
     * Ausführung unbedingt notwendig ist. Das ist bei einem ändernden Zugriff
     * nur dann der Fall, wenn andere Threads die entsprechende Variable
     * zeitgleich lesen oder schreiben können. Bei einem lesenden Zugriff soll
     * die Sperre nicht erworben werden, wenn andere Threads zeitgleich nur
     * lesend, aber nicht schreibend, auf die entsprechende Variable zugreifen
     * können.
     */
    ReentrantLock lock;


    public LockedDataObject() {
        this.lock = new ReentrantLock();
        this.condRead = lock.newCondition();
        this.condWrite = lock.newCondition();
        this.noReaders = 0;
        this.writer = false;
    }


    public int sum() {
        // Beachten Sie durchgängig die korrekte Verwendung der Sperrvariable
        // "lock". Erwerben Sie die Sperre nur, falls unbedingt notwendig.


        // 1. Solange ein Schreiber wartet oder schreibt, schlafenlegen.


        // 2. Anzahl der Leser um 1 erhöhen.


        // 3. Summe bilden
        int sum = super.sum();


        // 4. Anzahl der Leser erniedrigen und ggf. Schreiber aufwecken.


        // 5. Summe zurueckgeben
        return sum;
    }


    public void randomSwap() {
        // Beachten Sie durchgängig die korrekte Verwendung der Sperrvariable
        // "lock". Erwerben Sie die Sperre nur, falls unbedingt notwendig.


        // 1. Anzeigen, dass ein Schreiber wartet.


        // 2. Schlafenlegen, solange noch mindestens ein Leser aktiv


        // 3. Elemente vertauschen
        super.randomSwap();


        // 4. Anzeigen, dass kein Schreiber mehr wartet/schreibt und
        // ggf. Leser aufwecken.
    }
}




Diese Aufgabe haben wir als Übung erhalten, der Dozent meinte, durch die Kommentare, sei das eine 5 Minuten Aufgabe, damit können wir mal üben.

Es sei so einfach, dass keine Lösungen nötig seien..., da ja alles kommentiert sei.

Die Aufgaben stehen bei den beiden Methoden, also was genau man zu tun hat...

Wie wprde man das lösen? Könnte das jemand kurz tun, damit ich mal sehe, wie man hier vorgeht, ich lerne mehr beim sehen einer korrekten Lösung, wenn ich ein Thema neu lerne.

Ich konnte mir zu allem was denken, außer zu: "    // 1. Anzeigen, dass ein Schreiber wartet." Wie soll man das zeigen?