Hallo,
ich hätte eine Frage zu synchronized und begenzt kritischen Abschnitten.
Angenommen man hat folgende Ausgangslage:
Inwieweit ist synchronized atomar? Ich habe 10 Auto Threads. Angenommen einer ist als erster im kritischen Abschnitt angekommen, dann wird, da die Methode krtischerAbschnitt() synchronized ist, das Parkhaus gespeert. Nur die Frage ist, für wie lange? Bis der Thread die komplette Methode kritischerAbschnitt durch gearbeitet hat? Dann wäre das Problem, dass es an dieser Stelle immer nur 1 Teilnehmer drinne wäre. Angenommen es könnten in den kritischen Abschnitt 3 Autos rein, dann könnten diese ja gegenseitig die Variable test auf false oder true setzen. Würde ich die Variable test später lesen wollen, dann liese sich nicht mehr genau sagen, welchen wert diese hat, da ein Thread diese Variable gerade als true gelesen hat(an der if anweisung if(test)) und nun der andere Thread nun aber die Variable auf false setzt und er dann eine Variable als true einließt, welche eigentlich false gesetzt wurde. Wie verhält sich das mit synchronized genau, an dieser Stelle?
ich hätte eine Frage zu synchronized und begenzt kritischen Abschnitten.
Angenommen man hat folgende Ausgangslage:
Java:
public class Parkhaus {
int plaetze = 3;
boolean test = false;
public synchronized void kritischerAbschnitt(boolean a) {
while (plaetze == 0) {
try {
wait();
} catch (InterruptedException ex) {
}
}
plaetze--;
System.out.println("blabal");
...
....
if(a)
test = false;
else
test = true;
.....
......
if(test)...
}
}
public class Auto{
Parkhaus ab;
Auto(Parkhaus ab){
this.ab = ab;
}
void enter(boolean a){
ab.kritischerAbschnitt(a);
}
public void run(){
Random zufall = new Random(); // neues Random Objekt, namens zufall
int zufallsZahl = zufall.nextInt(2);
if(zufallsZahl)
enter(true);
else
enter(false)
}
}
Inwieweit ist synchronized atomar? Ich habe 10 Auto Threads. Angenommen einer ist als erster im kritischen Abschnitt angekommen, dann wird, da die Methode krtischerAbschnitt() synchronized ist, das Parkhaus gespeert. Nur die Frage ist, für wie lange? Bis der Thread die komplette Methode kritischerAbschnitt durch gearbeitet hat? Dann wäre das Problem, dass es an dieser Stelle immer nur 1 Teilnehmer drinne wäre. Angenommen es könnten in den kritischen Abschnitt 3 Autos rein, dann könnten diese ja gegenseitig die Variable test auf false oder true setzen. Würde ich die Variable test später lesen wollen, dann liese sich nicht mehr genau sagen, welchen wert diese hat, da ein Thread diese Variable gerade als true gelesen hat(an der if anweisung if(test)) und nun der andere Thread nun aber die Variable auf false setzt und er dann eine Variable als true einließt, welche eigentlich false gesetzt wurde. Wie verhält sich das mit synchronized genau, an dieser Stelle?
Zuletzt bearbeitet von einem Moderator: