1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
|
// Kontrolliert Zugang zum Vorzimmer des Professors
Semaphore vorzimmer = new CountingSemaphore(3);
// Der Professor bei der Beratungstätigkeit
Semaphore professor = new BinarySemaphore();
// Die auf den Sitzplätzen wartenden Studierenden
Semaphore studierende = new CountingSemaphore(0);
public class Student extends Thread {
public void run() {
vorzimmer.down(); // Student möchte Vorzimmer betreten
<Student betritt das Vorzimmer des Professors>
studierende.up(); // Sobald er drin ist, zeigt er an, dass er im Vorzimmer ist und sendet damit ein Signal an den Professor
professor.down(); // Student möchte zum Professor
<Student betritt das Zimmer des Professors>
studierende.down(); // Student darf ins Zimmer, also ist ein Student weniger im Wartezimmer
vorzimmer.up(); // Student gibt seinen Warteplatz im Wartezimmer frei, da er ja jetzt beim Professor sitzt.
}
}
public class Professor extends Thread {
public void run() {
while ( !studierende.down() ) // Solange die Warteliste leer ist (Aber blockiert da der Professor nicht?)
{
<Professor forscht>
}
professor.up(); // Professor hat auf das Signal hin aufgehört zu forschen und Student darf rein
<Professor berät einen Studenten>
professor.up(); // Student verlässt den Professor
}
}
|