Multicore und Synchronisation

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?

  1. AWeil gewöhnliches Lesen genauer als atomare Befehle ist
  2. BWeil ein atomarer Befehl nur einmal pro Programm verwendet werden kann
  3. CWeil bei bloßem Lesen im eigenen Cache gewartet werden kann und so die Kommunikation, bei der die Cache-Zeile zwischen den Kernen hin- und herwandert, stark verringert wird
Antwort und Erläuterung anzeigen

Antwort: C. Weil bei bloßem Lesen im eigenen Cache gewartet werden kann und so die Kommunikation, bei der die Cache-Zeile zwischen den Kernen hin- und herwandert, stark verringert wird

Ein atomarer Befehl beinhaltet einen Schreibvorgang; führt ein wartender Thread ihn wiederholt aus, streiten die Kerne jedes Mal im M-Zustand um die Zeile und machen fortwährend die Kopien anderer Kerne ungültig. Bei gewöhnlichem Lesen liest jeder Kern dagegen nur weiter seine Kopie im S-Zustand im eigenen Cache, und es entsteht keine Kommunikation. Nur wenn die Sperre freigegeben wird und sich der Wert ändert, wird mit dem atomaren Befehl zugegriffen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Welche Aussage im Vergleich von Mutex (schlafend wartende Sperre) und Spinlock ist richtig?
  2. Welches Beispiel für einen Deadlock ist richtig?
  3. Welche Methode zur Vermeidung von Deadlocks in Programmen mit mehreren Sperren ist am gebräuchlichsten?
  4. Was legt ein Speicherkonsistenzmodell (Memory Consistency Model) fest?
  5. Welche Aussage zur sequentiellen Konsistenz (Sequential Consistency) ist richtig?

Vergleiche zu diesem Thema