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?
- ALeest alleen de geheugenwaarde en voert de optelling in het register uit
- BTelt de waarden van twee geheugenadressen op en schrijft het resultaat naar een derde adres
- 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.