Multicore en synchronisatie

Welke uitleg over het ABA-probleem, dat bij lock-free datastructuren met CAS aandacht vraagt, is juist?

  1. ATwee threads A en B kunnen alleen nog om beurten worden uitgevoerd
  2. BWanneer een waarde van A naar B verandert en dan terug naar A, merkt CAS de verandering niet op en slaagt
  3. CTwee locks A en B worden in omgekeerde volgorde genomen
Antwoord en toelichting tonen

Antwoord: B. Wanneer een waarde van A naar B verandert en dan terug naar A, merkt CAS de verandering niet op en slaagt

Wanneer de kop van een gekoppelde lijst A is, kan terwijl een thread A leest en CAS voorbereidt een andere thread A verwijderen, bewerkingen met B uitvoeren en weer een knoop op hetzelfde adres A invoegen. CAS slaagt omdat de waarde nog A is, maar de inhoud van de lijst is intussen veranderd en de structuur raakt beschadigd. Dit wordt voorkomen door de pointer samen met een bijwerkteller te vergelijken, of met LR/SC.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. Welke beschrijving van de werking van een fetch-and-add-instructie, zoals amoadd.w van RISC-V of lock xadd van x86, is juist?
  2. Welke uitleg over een spinlock is juist?
  3. In welke situatie is een spinlock het minst geschikt?
  4. Waarom wordt bij een spinlock niet meteen met een atomaire instructie de lockvariabele proberen te wijzigen, maar wordt normaal met gewoon lezen gewacht tot de lock vrij lijkt en dan pas een atomaire instructie gebruikt (test-and-test-and-set)?
  5. Welke vergelijking van een mutex (slapende lock) en een spinlock is juist?

Vergelijkingen bij dit onderwerp