Altklausur Wintersemester 2017

Schreibtischlauf (2)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Altklausur Wintersemester 2017
(1) Ich haette gesagt die dritte Moeglichkeit wie sich das Programm verhalten kann ist, es wird gleichzeitig geschrieben, zum Schluss steht bar in foo, es wird die zwei ausgegeben. Meine Erklaerung warum das geht waeren die Pseudo-Register die zur Laufzeit von der JVM verwendet werden.

(2)Loesen wuerde ich das mit synchronized(TB.class)

Bei der B haette ich gesagt der main-Thread kriegt die Aenderungen ggfs gar nicht mit und gibt ‘a’ aus, eine Moeglichkeit um das Problem zu loesen waere synchronized void set()

Seid ihr Einverstanden? Hat wer andere Ideen???


Es kann nicht gleichzeitig geschrieben werden wegen der sync-blocks. Außerdem hat die JVM weder Register noch “Pseudo-Register” - bei Java über solche Dinge nachzudenken ist der völlig falsche Ansatz und führt zu falschen Ergebnissen. Der einzig wahre Weg ist das JMM.

Der main thread macht join. Die Änderungen der beiden anderen Threads passieren strikt vor der Ausgabe. Falls du synchronized void add (statt set) meinst, nein, das löst das Problem nicht. Aber ja, sync auf TB.class ist eine dumme Idee, auch wenn’s das Problem “löst”. Sync auf Klassen immer eine doofe Idee.


Okaz, dann musst du mir jetzt aber bitte helfen.

Moeglichkeit 1 t1 ist zuerst fertig => 3

Moeglichkeit 2 t2 ist zuerst fertig => 4

Moeglichkeit 3 ???


Deadlock. Siehe auch das FSI-pad


Ohje, Danke…habe das wohl übersehen das es für die Klausur auch einen Loesungsversuch gibt…