Contextela cohérence du cache et d'un thread
J'ai lu dans divers livres et articles pour en savoir plus sur les caches du processeur, la cohérence du cache, et les barrières de mémoire dans le cadre de l'exécution simultanée. Jusqu'à présent, cependant, j'ai été incapable de déterminer si une pratique de codage commune de la mienne est sûre au sens le plus strict.
Hypothèses
Le pseudo-code suivant est exécuté sur une machine à deux processeurs:
int sharedVar = 0; myThread() { print(sharedVar); } main() { sharedVar = 1; spawnThread(myThread); sleep(-1); }
main() exécute le processeur 1 (P1), tandis que MyThread () s'exécute sur P2.
Dans un premier temps, sharedVar existe dans les caches des deux P1 et P2 avec la valeur initiale de 0 (en raison d'un "code d'échauffement" qui ne figure pas ci-dessus.)
Question
Strictement parlant - de préférence sans supposer un type particulier de CPU - myThread() est-il garanti d'imprimer 1? Avec ma nouvelle connaissance des caches de processeurs, il semble tout à fait possible qu'au moment de l'instruction print(), P2 n'ait pas reçu la demande d'invalidation de sharedVar causée par l'affectation de P1 dans main(). Par conséquent, il semble possible que MyThread() pourrait imprimer 0.
Références
Ce sont les articles connexes et des livres que j'ai lu:
- Shared Memory Consistency Models: A Tutorial
- Memory Barriers: a Hardware View for Software Hackers
- Linux Kernel Memory Barriers
- Computer Architecture: A Quantitative Approach