Discuter:Section critique

Un article de Wikipédia, l'encyclopédie libre.

Je pense que la conclusion de l'exemple était fausse : le compteur a été multiplié par 2 à la fin de l'exécution et non incrémenté qu'une fois ! je m'explique avec un petit schèma :

pile après que les 2 thread est chargé le compteur et la valeur 1 :
-----
| 1 | <- la valeur 1 est chargée par le thread 2
-----
| 1 | <- la valeur 1 est chargée par le thread 1
-----
| n | <- le compteur est chargée par le thread 2
-----
| n | <- le compteur est chargée par le thread 1
-----

Ensuite le thread 1 fait le ADD :
-----
| 2 | <- résultat de l'addition
-----
| n | <- le compteur est chargée par le thread 2
-----
| n | <- le compteur est chargée par le thread 1
-----

Ensuite le thread 1 sauvegarde la valeur du haut de la pile dans le compteur (donc le compteur vaut 2) :
-----
| n | <- le compteur est chargée par le thread 2
-----
| n | <- le compteur est chargée par le thread 1
-----

Et enfin le thread 2 fait le ADD :
------
| 2n | <- résultat de l'addition
------

Ce résultat est sauvegardé dans le compteur (il a donc été multiplié par 2)

Je pense que l'erreur vient de l'exemple où le compteur vaut 1 au début de l'algorithme, ainsi à la fin il a bien été multiplié par 2, ce qui correspond aussi à une incrémentations de 1.


Non, car il y a deux piles d'exécution, une par thread et non une seule pile d'exécution ; Mais cela n'est peut être pas clair. Je vais regarder. Boretti 28 janvier 2007 à 15:07 (CET)