Multicore und Synchronisation

Welche Aussage zum ABA-Problem, das bei sperrfreien Datenstrukturen mit CAS auftritt, ist richtig?

  1. ADie beiden Threads A und B können nur noch abwechselnd ausgeführt werden
  2. BWenn sich ein Wert von A auf B und wieder zurück auf A ändert, bemerkt CAS die Änderung nicht und gelingt
  3. CDie beiden Sperren A und B werden in umgekehrter Reihenfolge belegt
Antwort und Erläuterung anzeigen

Antwort: B. Wenn sich ein Wert von A auf B und wieder zurück auf A ändert, bemerkt CAS die Änderung nicht und gelingt

Ist der Kopfzeiger einer verketteten Liste A, kann es vorkommen, dass ein anderer Thread, während ein Thread A liest und CAS vorbereitet, A entfernt, Operationen mit B durchführt und dann wieder einen Knoten mit derselben Adresse A einfügt. CAS gelingt, weil der Wert noch A ist, doch der Listeninhalt hat sich bereits geändert, und die Struktur wird zerstört. Verhindert wird dies, indem man dem Zeiger einen Aktualisierungszähler beifügt und beide gemeinsam vergleicht, oder durch den Einsatz von LR/SC.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Wie arbeitet ein Fetch-and-Add-Befehl (fetch-and-add) wie der Befehl amoadd.w von RISC-V oder lock xadd von x86?
  2. Welche Aussage zu Spinlocks ist richtig?
  3. In welcher Situation eignet sich ein Spinlock am wenigsten?
  4. 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?
  5. Welche Aussage im Vergleich von Mutex (schlafend wartende Sperre) und Spinlock ist richtig?

Vergleiche zu diesem Thema