Umsetzung Semaphor (Examensaufgabe Bayern)

Neue Frage »

Auf diesen Beitrag antworten »
Mathlet Umsetzung Semaphor (Examensaufgabe Bayern)

Hallo zusammen,

jetzt habe ich gerade noch einmal eine Anfrage zu Semphoren. Mir ist klar wie die grundsätzlich funktionieren, aber mit einer Aufgabe hier komme ich gerade nicht 100%ig zurecht:
http://www.lehramt-informatik.de/downloa...66114-H2008.pdf => Letzte Aufgabe "Synchronisation"

Mir wird eine rudimentäre Klasse für Semphoren gegeben und ich soll das Problem Initialisieren und zwei Klassen vervollständigen.
Gegeben:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public interface Sempahore{
	public void wait();
	public void signal();	
}
public class BinarySemaphore implements Semaphore{
	public BinarySemaphore(){ ... }
}
public class CountingSemaphore implements Semaphore{
	public CountingSemaphore(int N){ ... }
}


a) Bekomme ich soweit hin (wobei ich mir bei der Variablen studierende nicht sicher bin).
b) und c) bin ich mir aber nicht so sicher... Vor allem die while-Schleife ist ziemlich sicher falsch, da er ja mit dem Semaphor automatisch blockiert...
code:
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
	}
}


Für hilfreiche Tipps jederzeit dankbar :-D
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »