Supposons que j'ai deux threads A et B qui incrémentent tous les deux un ~ count ~ global ~ variable. Chaque thread exécute une boucle comme celui-ci:pthreads: Si j'incrémente un global à partir de deux threads différents, peut-il y avoir des problèmes de synchronisation?
for(int i=0; i<1000; i++)
count++; //alternatively, count = count + 1;
dire chaque incrément de fil comptent 1000 fois, et disons que le nombre commence à 0. Il peut y avoir des problèmes de synchronisation dans ce cas? Ou comptera correctement égal à 2000 lorsque l'exécution est terminée? Je suppose que l'instruction "count = count + 1" peut se décomposer en DEUX instructions d'assemblage, il est possible que l'autre thread soit permuté entre ces deux instructions? Pas certain. Qu'est-ce que tu penses?
Volatile ne force pas les charges et les magasins à aller à la mémoire, pas de la manière implicite ici. Volatile permet au compilateur de savoir que pour la variable en question, sa valeur peut changer sans la connaissance du compilateur, par ex. dites une horloge en temps réel. Cela signifie que le compilateur ne comptera pas sur les copies de registre de cette valeur. Cela n'empêche cependant pas le CPU de différer, par exemple, l'écriture de cette ligne de cache dans la mémoire aussi longtemps que possible (ce qui est le cas, car la mémoire écrit détruit les performances). –