Multicore en synchronisatie
In bovenstaande code bereidt thread 1 data voor en meldt dat met flag, en leest thread 2 data nadat hij flag heeft gezien. Wat is nodig om op een CPU met zwak geheugenconsistentiemodel zeker te zijn dat thread 2 de waarde 42 leest?
// スレッド1 // スレッド2
data = 42; while (flag == 0) { }
flag = 1; print(data);
- AHet type van data wijzigen van int in long
- BDe schrijfactie naar flag als release en de leesactie van flag als acquire gebruiken om de volgorde te garanderen
- CNiets in de lus van thread 2 schrijven
Antwoord en toelichting tonen
Antwoord: B. De schrijfactie naar flag als release en de leesactie van flag als acquire gebruiken om de volgorde te garanderen
Bij een zwak model kunnen de twee schrijfacties van thread 1 verwisseld zichtbaar worden, of kan de leesactie van data in thread 2 vóór die van flag plaatsvinden, zodat flag 1 is terwijl data nog oud is. Als de schrijfactie naar flag een release is, is gegarandeerd dat eerdere schrijfacties eerst zichtbaar zijn, en als de leesactie van flag een acquire is, lopen latere leesacties niet vooruit.