mardi 26 mai 2015

Wechselseitiger Ausschluss mit Locks/Semaphores

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 Code:

  1. public class VorlesungsverwaltungMonitor {
  2.  
  3. private HashSet<Vorlesung> vorlesungen;
  4. private HashSet<Student> studenten;
  5.  
  6.  
  7. public HashSet<Vorlesung> getVorlesungen() {
  8. return vorlesungen;
  9. }
  10.  
  11.  
  12. public void addVorlesung(Vorlesung vorlesung) {
  13. //TODO: Methode hier implementieren, um eine Vorlesung zum Verwaltungssystem hinzuzufuegen
  14. synchronized(vorlesungen) {
  15. vorlesungen.add(vorlesung);
  16. }
  17. }
  18.  
  19.  
  20. public void deleteVorlesung(Vorlesung vorlesung) {
  21. //TODO: Methode hier implementieren, um eine Vorlesung aus dem Verwaltungssystem zu loeschen
  22. synchronized(vorlesungen){
  23. vorlesungen.remove(vorlesung);
  24. }
  25. }
  26.  
  27.  
  28. public HashSet<Student> getStudenten() {
  29. return studenten;
  30. }
  31.  
  32.  
  33. public void addStudent(Student student) {
  34. //TODO: Methode hier implementieren, um einen Studenten zum Verwaltungssystem hinzuzufuegen
  35. synchronized(studenten){
  36. studenten.add(student);
  37. }
  38. }
  39.  
  40.  
  41. public void deleteStudent(Student student){
  42. //TODO: Methode hier implementieren, um einen Studenten aus dem Verwaltungssystem zu loeschen
  43. synchronized(studenten){
  44. studenten.remove(student);
  45. }
  46. }
  47.  
  48.  
  49. public void addPointsForStudent(Student s, Vorlesung v, int blattnummer, int punktzahl){
  50. //TODO: Methode hier implementieren, um einem Studenten s fuer die Vorlesung v auf Blatt blattnummer die Punktzahl punktzahl zu geben
  51. synchronized(v){
  52. v.setPunkteStudent(s, punktzahl, blattnummer);
  53. }
  54.  
  55. }
  56.  
  57.  
  58. public boolean studentInVorlesung(Student s, Vorlesung v){
  59. //TODO: Methode hier implementieren, die zurueckgibt, ob Student s Vorlesung v belegt
  60. return v.getTeilnehmer().contains(s);
  61. }
  62.  
  63.  
  64. public void addStudentToVorlesung(Student s, Vorlesung v){
  65. //TODO: Methode hier implementieren, die Student s zu Vorlesung v hinzufuegt
  66. synchronized(v){
  67. v.addTeilnehmer(s);
  68. }
  69. }
  70.  
  71.  
  72. public void deleteStudentFromVorlesung(Student s, Vorlesung v){
  73. //TODO: Methode hier implementieren, die Student s aus Vorlesung v loescht
  74. synchronized(v){
  75. v.removeTeilnehmer(s);
  76. }
  77. }
  78. }


Wechselseitiger Ausschluss mit Locks/Semaphores

0 commentaires:

Enregistrer un commentaire