Hallo,
die Lösung ist unten zufinden.
Ich habe jedoch Probleme das ganze selber aufzustellen.
Die ersten drei Zeilen habe ich selber nachvollziehen können, nur weiß ich nicht warum bei der 4. Zeile
400 A OUT P, Anzahl = 0, und nicht 200..
Außerdem, weiß ich auch nicht ganz wann genau man nun fertig ist.
Also wie erkennt man das man beim Ziel angekommen ist?
Und woher weiß man welchen Monitor P bzw. Monitor Q verwenden muss?
Könnte jemand vllt für einige Beispiele den Code Schritt für Schritt durchgehen, so das ich nachvollziehen kann, wann genau nun P bzw. Q verwendet wird & warum die erste Zahl ändert?
Aufgabe:
Lösung:
die Lösung ist unten zufinden.
Ich habe jedoch Probleme das ganze selber aufzustellen.
Die ersten drei Zeilen habe ich selber nachvollziehen können, nur weiß ich nicht warum bei der 4. Zeile
400 A OUT P, Anzahl = 0, und nicht 200..
Außerdem, weiß ich auch nicht ganz wann genau man nun fertig ist.
Also wie erkennt man das man beim Ziel angekommen ist?
Und woher weiß man welchen Monitor P bzw. Monitor Q verwenden muss?
Könnte jemand vllt für einige Beispiele den Code Schritt für Schritt durchgehen, so das ich nachvollziehen kann, wann genau nun P bzw. Q verwendet wird & warum die erste Zahl ändert?
Aufgabe:
- Die erste Ausgabezeile lautet: 200 A IN P, Anzahl = 1
Java:
public class Aufgabe4_4 {
static long Startzeit = System.currentTimeMillis();
public static void main(String[] args) {
Monitor2 P = new Monitor2("Monitor 1"), Q = new Monitor2("Monitor 2");
new Prozess('A', P, Q, 200, 600).start();
new Prozess('B', P, Q, 400, 100).start();
new Prozess('C', P, Q, 600, 100).start();
new Prozess('D', P, Q, 800, 300).start();
}
}
class Monitor2 {
String Moni;
int Anzahl = 0;
Monitor2(String Moni) {
this.Moni = Moni;
}
synchronized void Eintritt(char Proz) {
Anzahl += 1;
Ausgabe(Proz + " IN " + Moni + ", Anzahl = " + Anzahl);
while (Anzahl < 2)
try {
wait();
} catch (InterruptedException e) {
}
if (Anzahl >= 2 && Anzahl < 7)
Anzahl += 7;
else
Anzahl -= 9;
Ausgabe(Proz + " OUT " + Moni + ", Anzahl = " + Anzahl);
notifyAll();
}
void Ausgabe(String Meldung) // Zeit in Millisekunden.
{
long Zeit = (System.currentTimeMillis() - Aufgabe4_4.Startzeit);
System.out.println(Zeit + " " + Meldung);
}
}
class Prozess extends Thread {
char Proz;
Monitor2 P, Q;
int x, y;
Prozess(char Proz, Monitor2 P, Monitor2 Q, int x, int y) {
this.Proz = Proz;
this.P = P;
this.Q = Q;
this.x = x;
this.y = y;
}
public void run() {
try {
sleep(x);
} catch (InterruptedException e) {
}
P.Eintritt(Proz);
try {
sleep(y);
} catch (InterruptedException e) {
}
Q.Eintritt(Proz);
}
}
Lösung:
Java:
200 A IN P, Anzahl = 1 wait()
400 B IN P, Anzahl = 2
400 B OUT P, Anzahl = 9 warte 100 ZE (500)
400 A OUT P, Anzahl = 0 warte 600 ZE (1000)
500 B IN Q, Anzahl = 1 wait()
600 C IN P, Anzahl = 1 wait()
800 D IN P, Anzahl = 2
800 D OUT P, Anzahl = 9 warte 300 ZE (1100)
800 C OUT P, Anzahl = 0 warte 100 ZE (900)
900 C IN Q, Anzahl = 2
900 C OUT Q, Anzahl = 9 Ziel
900 B OUT Q, Anzahl = 0 Ziel
1000 A IN Q, Anzahl = 1 wait()
1100 D IN Q, Anzahl = 2
1100 D OUT Q, Anzahl = 9 Ziel
1100 A OUT Q, Anzahl = 0 Ziel
Zuletzt bearbeitet: