Multicore und Synchronisation

Welche Methode zur Vermeidung von Deadlocks in Programmen mit mehreren Sperren ist am gebräuchlichsten?

  1. ADie Reihenfolge, in der alle Threads Sperren erwerben, im gesamten Programm einheitlich festlegen
  2. BEine erworbene Sperre niemals freigeben
  3. CDie Zahl der Threads auf höchstens zwei beschränken
Antwort und Erläuterung anzeigen

Antwort: A. Die Reihenfolge, in der alle Threads Sperren erwerben, im gesamten Programm einheitlich festlegen

Ein Deadlock entsteht, wenn sich ein „Ring“ bildet, in dem Threads gegenseitig auf die Sperren des anderen warten. Halten sich beispielsweise alle an die Regel „stets erst A, dann B erwerben“, gibt es keinen Thread, der B hält und auf A wartet, und kein Ring entsteht. Weitere Methoden sind, die benötigten Sperren gesammelt auf einmal zu erwerben, oder bei Misserfolg die gehaltenen Sperren freizugeben und neu zu beginnen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Was legt ein Speicherkonsistenzmodell (Memory Consistency Model) fest?
  2. Welche Aussage zur sequentiellen Konsistenz (Sequential Consistency) ist richtig?
  3. 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?
  4. Welches Merkmal des Speicherkonsistenzmodells von x86 (TSO, Total Store Order) ist richtig?
  5. Was gilt für schwache Speicherkonsistenzmodelle wie bei ARM oder RISC-V (RVWMO)?

Vergleiche zu diesem Thema