Wechselseitiger Ausschluss mit Locks/Semaphores

m11

Mitglied
Guten Morgen,

ich habe hier eine Klasse, deren Methoden durch Objektmonitore geschützt sind um inkonsitente Daten zu verhindern, wenn mehrere Threads diese aufrufen.
Nun soll das ganze noch einmal mit Locks und einmal mit Semaphores realisiert werden.
Meine Frage ist, ob ich für jede der Methoden ein eigenes Lock/Semaphore Objekt erstellen muss.
Was die Klasse macht ist zweitrangig, mir geht es nur um die Realisierung des Wechselseitigen Ausschlusses.

Java:
public class VorlesungsverwaltungMonitor {

    private HashSet<Vorlesung> vorlesungen;
    private HashSet<Student> studenten;


    public HashSet<Vorlesung> getVorlesungen() {
        return vorlesungen;
    }


    public void addVorlesung(Vorlesung vorlesung) {
        //TODO: Methode hier implementieren, um eine Vorlesung zum Verwaltungssystem hinzuzufuegen
        synchronized(vorlesungen) {
            vorlesungen.add(vorlesung);
        }
     }


    public void deleteVorlesung(Vorlesung vorlesung) {
        //TODO: Methode hier implementieren, um eine Vorlesung aus dem Verwaltungssystem zu loeschen
        synchronized(vorlesungen){
            vorlesungen.remove(vorlesung);
        }
    }


    public HashSet<Student> getStudenten() {
        return studenten;
    }


    public void addStudent(Student student) {
        //TODO: Methode hier implementieren, um einen Studenten zum Verwaltungssystem hinzuzufuegen
        synchronized(studenten){
            studenten.add(student);
        }
     }


    public void deleteStudent(Student student){
        //TODO: Methode hier implementieren, um einen Studenten aus dem Verwaltungssystem zu loeschen
        synchronized(studenten){
            studenten.remove(student);
        }
    }


    public void addPointsForStudent(Student s, Vorlesung v, int blattnummer, int punktzahl){
        //TODO: Methode hier implementieren, um einem Studenten s fuer die Vorlesung v auf Blatt blattnummer die Punktzahl punktzahl zu geben
        synchronized(v){
            v.setPunkteStudent(s, punktzahl, blattnummer);
        }
        
    }


    public boolean studentInVorlesung(Student s, Vorlesung v){
        //TODO: Methode hier implementieren, die zurueckgibt, ob Student s Vorlesung v belegt
        return v.getTeilnehmer().contains(s);
    }


    public void addStudentToVorlesung(Student s, Vorlesung v){
        //TODO: Methode hier implementieren, die Student s zu Vorlesung v hinzufuegt
        synchronized(v){
            v.addTeilnehmer(s);
        }
    }


    public void deleteStudentFromVorlesung(Student s, Vorlesung v){
        //TODO: Methode hier implementieren, die Student s aus Vorlesung v loescht
        synchronized(v){
            v.removeTeilnehmer(s);
        }
    }
}
 

Ähnliche Java Themen


Oben