Multicore en synchronisatie

Welke beschrijving van de werking van een fetch-and-add-instructie, zoals amoadd.w van RISC-V of lock xadd van x86, is juist?

  1. ALeest alleen de geheugenwaarde en voert de optelling in het register uit
  2. BTelt de waarden van twee geheugenadressen op en schrijft het resultaat naar een derde adres
  3. CTelt ondeelbaar een opgegeven getal bij de geheugenwaarde op en geeft de waarde van vóór het optellen terug
Antwoord en toelichting tonen

Antwoord: C. Telt ondeelbaar een opgegeven getal bij de geheugenwaarde op en geeft de waarde van vóór het optellen terug

Fetch-and-add voert lezen, optellen en schrijven uit als één ondeelbare bewerking, zodat de data race van counter++ met één instructie wordt opgelost. Omdat de waarde van vóór het optellen wordt teruggegeven, kan het ook worden gebruikt voor het uitdelen van volgnummers (bijvoorbeeld om elke thread een niet-overlappend nummer toe te wijzen). Omdat er geen mislukking en herhaling is zoals bij een CAS-lus, is het voordelig wanneer veel threads tegelijk bijwerken.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. Welke uitleg over een spinlock is juist?
  2. In welke situatie is een spinlock het minst geschikt?
  3. 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)?
  4. Welke vergelijking van een mutex (slapende lock) en een spinlock is juist?
  5. Welk voorbeeld van een deadlock is juist?

Vergelijkingen bij dit onderwerp