Je me réfère à la définition formelle du modèle de mémoire C++11 (Mark Batty et al.), qui inclut les atomiques, les verrous, les modèles de mémoire relaxés, mais aucune définition formelle sur le comportement des variables de condition. De même, dans le modèle de mémoire Java, il n'y a pas non plus de définition des mécanismes wait() et notify(). Pourquoi en est-il ainsi ?
Réponse
Trop de publicités?De même, le modèle de mémoire Java ne contient aucune définition des mécanismes wait() et notify(). Comment cela se fait-il ?
Parce qu'il s'agit d'un modèle de mémoire. Il modélise / spécifie le comportement des opérations de lecture et d'écriture de la mémoire dans une application multithread.
Aspects du comportement des wait()
y notify()
sont (dans un sens) émergente du modèle de mémoire. Les appels à wait()
y notify()
doit se faire avec des mutex primitifs. Cela signifie que les serrure y déverrouiller les actions se produisent à des points spécifiques, et (dans le cas des wait()
), ils sont spécifiés comme faisant déverrouiller y serrure dans certaines circonstances. Ces actions sont modélisées dans le modèle de mémoire ... et cela rend la sémantique émergente des variables de condition solide, à condition que vous respectiez les modèles recommandés pour les mettre en œuvre.