Multicore en synchronisatie
De bovenstaande twee threads worden tegelijk op verschillende cores uitgevoerd (er is geen herordening door de compiler). Welke uitkomst treedt niet op bij sequentiële consistentie, maar kan wel optreden bij echte CPU's zoals x86?
// 最初は x = 0, y = 0
// スレッド1 // スレッド2
x = 1; y = 1;
r1 = y; r2 = x;
- Ar1 = 1 en r2 = 1
- Br1 = 0 en r2 = 1
- Cr1 = 0 en r2 = 0
Antwoord en toelichting tonen
Antwoord: C. r1 = 0 en r2 = 0
Bij sequentiële consistentie gebeurt een van de schrijfacties als eerste, dus minstens één van de leesacties zou 1 moeten zien. Bij echte CPU's komt x = 1 echter eerst in de store buffer van de core, en de latere leesactie r1 = y kan eerder een waarde uit het hoofdgeheugen of de cache lezen voordat de schrijfactie voor andere cores zichtbaar wordt. Als dit bij beide cores gebeurt, lezen beide 0. Dit wordt voorkomen door tussen schrijven en lezen een geheugenbarrière te plaatsen.