Multicore und Synchronisation

Wann schlägt bei einem Befehlspaar wie LR/SC (Load-Reserved/Store-Conditional) von RISC-V das SC (Store-Conditional) fehl?

  1. AWenn der mit SC geschriebene Wert dem mit LR gelesenen Wert entspricht
  2. BWenn zwischen LR und SC die Reservierung verloren ging, etwa weil ein anderer Kern an diese Adresse geschrieben hat
  3. CWenn zwischen LR und SC auch nur ein weiterer Befehl ausgeführt wurde
Antwort und Erläuterung anzeigen

Antwort: B. Wenn zwischen LR und SC die Reservierung verloren ging, etwa weil ein anderer Kern an diese Adresse geschrieben hat

LR „reserviert“ die Adresse zugleich mit dem Lesen des Wertes. Beim anschließenden Schreiben mit SC gelingt dieses, wenn die Reservierung erhalten ist; ist sie z. B. durch ein Schreiben eines anderen Kerns verloren gegangen, wird nicht geschrieben und ein Fehlschlag gemeldet. Während CAS auf Wertgleichheit prüft, prüft LR/SC, ob geschrieben wurde; deshalb wird auch erkannt, wenn sich ein Wert einmal geändert hat und wieder auf den ursprünglichen zurückgekehrt ist. Auch ARM besitzt ein ähnliches Befehlspaar.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Welche Aussage zum ABA-Problem, das bei sperrfreien Datenstrukturen mit CAS auftritt, ist richtig?
  2. Wie arbeitet ein Fetch-and-Add-Befehl (fetch-and-add) wie der Befehl amoadd.w von RISC-V oder lock xadd von x86?
  3. Welche Aussage zu Spinlocks ist richtig?
  4. In welcher Situation eignet sich ein Spinlock am wenigsten?
  5. 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?

Vergleiche zu diesem Thema