Synchronisation émetteur/récepteur
2 participants
Page 1 sur 1
Synchronisation émetteur/récepteur
Bonjour.
Ma remarque porte sur la séquence 27, « Discussion sur les sections critiques » (le lien Youtube ne passe pas dans le message, désolé). À 6:30, il est dit que le résultat est correct tant que la variable plein est modifiée après la variable valeur. C'est bien le cas au niveau du code source de la méthode Emetteur.run mais d'après le modèle mémoire Java (le lien de la documentation ne passe pas non plus, le modèle est décrit à la section 17.4 de la spécification du langage), le compilateur ou l'environnement d'exécution sont autorisés à réordonner les lectures et écritures de variables non volatiles au sein d'un thread. Pour que l'exemple soit correct, il faudrait que plein soit déclaré volatile afin d'introduire une relation happens-before entre la modification de valeur dans Emetteur et la lecture de plein dans Recipiendaire.
Cordialement, Benoit Vey
Ma remarque porte sur la séquence 27, « Discussion sur les sections critiques » (le lien Youtube ne passe pas dans le message, désolé). À 6:30, il est dit que le résultat est correct tant que la variable plein est modifiée après la variable valeur. C'est bien le cas au niveau du code source de la méthode Emetteur.run mais d'après le modèle mémoire Java (le lien de la documentation ne passe pas non plus, le modèle est décrit à la section 17.4 de la spécification du langage), le compilateur ou l'environnement d'exécution sont autorisés à réordonner les lectures et écritures de variables non volatiles au sein d'un thread. Pour que l'exemple soit correct, il faudrait que plein soit déclaré volatile afin d'introduire une relation happens-before entre la modification de valeur dans Emetteur et la lecture de plein dans Recipiendaire.
Cordialement, Benoit Vey
Benoit Vey- Posts : 1
Join date : 22/09/2016
Re: Synchronisation émetteur/récepteur
Bonjour,
J'ai pourtant lancé un très grand nombre d'exécutions (tests automatiques) et je n'ai pas rencontré de problème avec l'exécution de mon exemple. cela est sans doute du au fait que mon exemple n'est pas très "violent" puisqu'il n'y a qu'un seul écrivain et un seul lecteur.
Cela dit, votre remarque est intéressante car, en effet, la notion de "volatile" permet d'éviter les soucis de cache entre cœurs via cette fameuse relation "happens-before"...
Merci.
J'ai pourtant lancé un très grand nombre d'exécutions (tests automatiques) et je n'ai pas rencontré de problème avec l'exécution de mon exemple. cela est sans doute du au fait que mon exemple n'est pas très "violent" puisqu'il n'y a qu'un seul écrivain et un seul lecteur.
Cela dit, votre remarque est intéressante car, en effet, la notion de "volatile" permet d'éviter les soucis de cache entre cœurs via cette fameuse relation "happens-before"...
Merci.
Re: Synchronisation émetteur/récepteur
By the way, j'ai fait un patch sur le résumé de la séquence (je ferais un correctif plus tard mais cela pose un problème car les mots clefs "volatile" n'ont pas été introduits et sont véritablement un truc de Java ;-). Il faut que j'y réfléchisse...
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|