Qu'est ce qu'un mémoire de clôture?
Ce que l'on entend par utilisation d'une mémoire explicite clôture?
Vous devez vous connecter pour publier un commentaire.
Ce que l'on entend par utilisation d'une mémoire explicite clôture?
Vous devez vous connecter pour publier un commentaire.
Pour des gains de performance Processeurs modernes souvent d'exécuter des instructions de commande à utiliser au maximum le silicium (y compris la mémoire en lecture/écriture). Parce que le matériel met en œuvre les instructions de l'intégrité vous ne remarquerez ce dans un seul thread d'exécution. Cependant, pour plusieurs threads ou des environnements avec de la mémoire volatile (memory mapped I/O par exemple), cela peut entraîner un comportement imprévisible.
Un mémoire en clôture/barrière est une classe d'instructions qui signifie mémoire de lecture/écriture se produisent dans l'ordre que vous attendez. Par exemple une "clôture" désigne toutes les lectures/écritures avant la clôture sont partie prenante avant que ceux-ci après la clôture.
Note de la mémoire clôtures sont un concept hardware. Dans un langage de haut niveau, nous sommes habitués à traiter avec les mutex et les sémaphores - celles-ci peuvent être mis en œuvre à l'aide de la mémoire des clôtures au faible niveau de l'explicite et l'utilisation de barrières de mémoire ne sont pas nécessaires. L'utilisation de barrières de mémoire nécessite une étude approfondie de l'architecture matérielle et le plus souvent à des pilotes de périphérique que le code de l'application.
Le CPU réorganisation est différent des optimisations du compilateur - bien que les objets peuvent être similaires. Vous avez besoin de prendre des mesures distinctes pour arrêter le compilateur réorganisation de vos instructions si cela peut provoquer des comportements indésirables (par exemple, l'utilisation du mot clé volatile en C).
printf("hello ");printf("world");
pour produire de la "worldhello ".Copie ma réponse à une autre question, Quels sont les trucs qu'un processeur ne pour optimiser le code?:
Dans mon expérience, il se réfère à un barrière de mémoire, qui est une instruction (explicite ou implicite) pour synchroniser les accès à la mémoire entre plusieurs threads.
Le problème se produit dans la combinaison de moderne agressive compilateurs (ils ont un incroyable liberté de réorganiser les instructions, mais généralement ne sais rien de votre fils) et des Processeurs multicœurs.
Une bonne introduction au problème est la "Le "Double-Vérifier le Verrouillage est Cassé" Déclaration". Pour beaucoup, c'était le réveil qu'il y a des dragons.
Implicite de mémoire pleine obstacles sont généralement inclus dans la plate-forme de synchronisation de thread routines, qui couvrent l'essentiel. Toutefois, pour les sans verrouillage de la programmation et de la mise en œuvre de la coutume, léger synchronisation de modèles, souvent, vous avez juste besoin de la barrière, ou même une barrière une voie seulement.
Wikipedia sait tous...