In der nebenläufigen Programmierung nennt sich das Deadlock. Zum Beispiel wenn zwei Threads versuchen zwei Mutexe in unterschiedlicher Reihenfolge zu sperren.
"Kreuzung immer frei halten und im Zweifelsfall auf die eigene Vorfahrt verzichten"
tjo, doof ne !?
Kommentare
Gastiger Gast (nicht überprüft)
1
0
*Klugscheisser Modus an*
Also eigentlich ist da gar nicht so viel los ... und falsch Verhalten hat sich nur der graue Bus, denn der ist auf die Schienen gefahren ohne jene vollständig queren zu können. Netter Weise setzt der Rettungswagen und das Auto daneben zurück um so die Strecke frei machen zu können. Somit ist der Titel nicht lustig und der Vergleich mit einem Deadlock nicht treffend :P
Ja dachte ich mir auch. Rettung zurück, grauer Bus runter von den Schienen, Bahn kann fahren, Verkehr kann abfließen. Aber wer soll es ihnen sagen? Die werden dort leider für alle Ewigkeit stehen.
In der nebenläufigen Programmierung nennt sich das Deadlock. Zum Beispiel wenn zwei Threads versuchen zwei Mutexe in unterschiedlicher Reihenfolge zu sperren.
Bis einer der Busfahrer keine Lust mehr auf Stau hat und geht. Das nennt man dann Deadlock Holiday. --Und in escht: wußte nicht, daß das überhaupt geht. Dachte bis jetzt, daß in dem Moment, in dem ein Thread einen mutex besitzt, alle anderen "locks" blockiert werden oder bei "try_lock" "false" kriegen. Aber wahrscheinlich habe ich nur mal wieder den Gag net kapiert.
Es gibt Mutex1 und Mutex2. Beide Threads können sie nutzen. Jetzt will Thread1 zuerst Mutex1 und dann Mutex2 sperren und Thread2 will zuerst Mutex2 und dann Mutex1 sperren.
Das schlimmste, was nun passieren kann, ist diese Abarbeitungsreihenfolge:
1. Thread1 sperrt Mutex1
2. Thread2 sperrt Mutex2
Schon kommen beide nicht mehr weiter, denn Thread1 kann jetzt Mutex2 nicht mehr sperren und Thread2 kann nicht mehr Mutex1 sperren. Ein TryLock bringt da auch nichts, außer man kann im Programmverlauf zurück gehen und den zuvor gesperrten Mutex wieder entsperren, damit der andere Thread weiter machen kann. Aber wie sollen sich die beiden Threads einigen wer zuerst darf?
Die Lösung ist immer die gleiche Reihenfolge bei mehreren Mutexen einzuhalten. Dann kann nichts passieren, man braucht quasi so eine Art Prioritätenliste für Mutexe.