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?
- AWeil gewöhnliches Lesen genauer als atomare Befehle ist
- BWeil ein atomarer Befehl nur einmal pro Programm verwendet werden kann
- 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.