J'essaie d'améliorer ma compréhension des barrières de la mémoire. Supposons que nous ayons un modèle de mémoire faible et nous adaptons Dekker's algorithm. Est-il possible de le faire fonctionner correctement sous le modèle de mémoire faible en ajoutant des barrières de mémoire?Barrières de mémoire contre les opérations interverrouillées
Je pense que la réponse est un non surprenant. La raison (si je me trompe) est que même si une barrière de mémoire peut être utilisée pour s'assurer qu'une lecture ne soit pas déplacée, elle ne peut pas garantir qu'une lecture ne voit pas de données périmées (comme dans un cache). Ainsi, il pourrait voir un certain temps dans le passé lorsque la section critique a été déverrouillée (par le cache du processeur), mais à l'heure actuelle, d'autres processeurs pourraient le voir verrouillé. Si ma compréhension est correcte, il faut utiliser des opérations imbriquées telles que celles communément appelées test-and-set ou compare-and-swap pour assurer l'accord synchronisé d'une valeur à un emplacement mémoire entre plusieurs processeurs.
Ainsi, pouvons-nous à juste titre nous attendre à ce qu'aucun système de modèle de mémoire faible ne fournisse que des barrières de mémoire? Le système doit fournir des opérations comme test-and-set ou compare-and-swap pour être utile. Je me rends compte que les processeurs populaires, y compris x86, fournissent des modèles de mémoire beaucoup plus forts qu'un modèle de mémoire faible. Veuillez concentrer la discussion sur les modèles à mémoire faible.
(Si l'algorithme de Dekker est un mauvais choix, choisir un autre algorithme d'exclusion mutuelle où les barrières de mémoire peuvent réussir à atteindre la synchronisation correcte, si possible.)
AFAICT, pour Dekker, il ne suffit pas de savoir que le drapeau était clair quelque temps auparavant, mais plutôt qu'il est sûr d'entrer dans la section critique en ce moment. On dirait que j'ai besoin de la valeur mise à jour, et je ne vois pas comment vous obtenez cela avec des barrières de mémoire (comme vous le dites dans votre première phrase). –
Vous avez juste besoin d'une barrière plus forte que celle que je viens de montrer --- une "clôture complète". Je mettrai à jour ma réponse pour montrer à Dekker avec des barrières plus tard. –