Multicore und Synchronisation

In welcher Situation eignet sich ein Spinlock am wenigsten?

  1. AWenn die Sperre lange gehalten wird und wartende Threads unnötig CPU-Zeit verbrauchen
  2. BWenn die Sperre nur sehr kurz, einige zehn Nanosekunden, gehalten wird
  3. CBei Verarbeitung im Betriebssystemkern, bei der nicht geschlafen werden kann
Antwort und Erläuterung anzeigen

Antwort: A. Wenn die Sperre lange gehalten wird und wartende Threads unnötig CPU-Zeit verbrauchen

Ein auf einen Spinlock wartender Thread verbraucht CPU-Zeit, bis die Sperre frei ist. Wird die Sperre lange gehalten, ist die gesamte CPU-Zeit verschwendet und die Ausführung anderer Threads wird behindert. Gibt es nur einen einzigen Kern, wird die Sperre erst frei, wenn der sperrhaltende Thread ausgeführt wird, sodass das Warten bis zum Ende der Zeitscheibe andauert. Für längeres Warten wird ein Mutex verwendet, der schlafend wartet, oder ein Verfahren, das nur kurz kreist und dann schläft.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Warum wartet man bei Spinlocks (Test-and-Test-and-Set) normalerweise mit gewöhnlichem Lesen auf die Freigabe, statt die Sperrvariable sofort mit einem atomaren Befehl zu ändern, und verwendet den atomaren Befehl nur, wenn die Sperre frei erscheint?
  2. Welche Aussage im Vergleich von Mutex (schlafend wartende Sperre) und Spinlock ist richtig?
  3. Welches Beispiel für einen Deadlock ist richtig?
  4. Welche Methode zur Vermeidung von Deadlocks in Programmen mit mehreren Sperren ist am gebräuchlichsten?
  5. Was legt ein Speicherkonsistenzmodell (Memory Consistency Model) fest?

Vergleiche zu diesem Thema