Multicore und Synchronisation

Welches Beispiel für einen Deadlock ist richtig?

  1. AThread 1 hält Sperre A und wartet auf Sperre B, Thread 2 hält Sperre B und wartet auf Sperre A
  2. BZwei Threads ändern dieselbe Variable ohne Synchronisation, und der Wert wird zerstört
  3. CEin Thread erhält eine Sperre und gibt sie sofort wieder frei
Antwort und Erläuterung anzeigen

Antwort: A. Thread 1 hält Sperre A und wartet auf Sperre B, Thread 2 hält Sperre B und wartet auf Sperre A

Ein Deadlock ist ein Zustand, in dem mehrere Threads jeweils Ressourcen halten und auf Ressourcen warten, die andere Threads halten, sodass keiner mehr weiterkommt. Im Beispiel wartet Thread 1 auf die Freigabe von B und Thread 2 auf die von A, doch keiner gibt seine eigene Sperre ab, sodass beide dauerhaft stehen bleiben. Da sie ohne CPU-Verbrauch stehen, wirkt die Verarbeitung von außen wie eingefroren.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Welche Methode zur Vermeidung von Deadlocks in Programmen mit mehreren Sperren ist am gebräuchlichsten?
  2. Was legt ein Speicherkonsistenzmodell (Memory Consistency Model) fest?
  3. Welche Aussage zur sequentiellen Konsistenz (Sequential Consistency) ist richtig?
  4. Die beiden obigen Threads laufen gleichzeitig auf getrennten Kernen (ohne Umordnung durch den Compiler). Welches Ergebnis tritt bei sequentieller Konsistenz nicht auf, kann aber bei realen CPUs wie x86 auftreten?
  5. Welches Merkmal des Speicherkonsistenzmodells von x86 (TSO, Total Store Order) ist richtig?

Vergleiche zu diesem Thema