Il existe déjà beaucoup d'informations sur les modèles de mémoire logiciels et matériels, les barrières de mémoire, le réordonnancement du stockage/chargement, etc. Cependant, tout cela semble se concentrer sur la garantie de l'ordre relatif des lectures et des écritures vers et depuis la mémoire partagée.
Serait-il légal qu'un tel système retarde l'écriture d'un fil de discussion pendant une période potentiellement longue ?
Prenons l'exemple d'un thread qui effectue des mises à jour d'une structure de données en mémoire, puis lève un drapeau censé informer les autres threads de la mise à jour :
(dataWritten is initially false)
store value1
store value2
store value3
mfence
store dataWritten (true)
Selon la plupart des modèles de mémoire que j'ai lus, la barrière mémoire garantit qu'aucun autre thread ne peut observer dataWritten comme vrai, tout en lisant les valeurs 1, 2 ou 3 périmées, c'est-à-dire qu'elle rend ces écritures atomiques.
Mais puis-je être sûr que les écrits seront vus du tout ? Serait-il légal, selon le modèle de mémoire, de retarder les écritures indéfiniment, tant que le drapeau n'est pas écrit avant les valeurs ?
En termes de base de données, les modèles de mémoire peuvent-ils être utilisés pour raisonner sur la durabilité (en plus de l'atomicité et de la cohérence, qui peuvent être garanties en utilisant des barrières et des drapeaux de mémoire comme dans l'exemple ci-dessus) ?
Mise à jour : Sémantique détaillée de la volatile concernant l'opportunité de la visibilité traite du même sujet dans le contexte du modèle de mémoire Java, et Ordre et visibilité des modèles de mémoire ? Cette discussion s'applique-t-elle également aux modèles de mémoire matérielle, c'est-à-dire que les ISA des CPU ne donnent que des garanties fermes pour une séquence de visibilité correcte, mais des garanties "souples" pour une visibilité retardée ?