Question

La mémoire de deux processus Windows a été mappée sur le même fichier partagé. Si le fichier est constitué de compteurs, convient-il d'utiliser les fonctions Interlocked * (comme InterlockedIncrement ) pour mettre à jour ces compteurs? Ceux-ci vont-ils synchroniser l'accès entre les processus? Ou dois-je utiliser quelque chose de plus lourd, comme un mutex? Ou peut-être que le mécanisme de mémoire partagée lui-même garantit des vues cohérentes.

Était-ce utile?

La solution

De MSDN :

  

...

     

L'API interverrouillée

     

Les fonctions interverrouillées fournissent une   mécanisme simple de synchronisation   l'accès à une variable partagée par   plusieurs threads. Ils effectuent également   opérations sur des variables dans un atome   manière. Les fils de différents   les processus peuvent utiliser ces fonctions si   la variable est en mémoire partagée.

Donc, oui, votre approche de la mémoire partagée est sûre.

Autres conseils

Les fonctions verrouillées sont conçues pour ce type d’utilisation.

De http://msdn.microsoft.com/en-us/ bibliothèque / ms684122.aspx :

  

Les threads de différents processus peuvent utiliser ces fonctions si la variable est en mémoire partagée.

Bien sûr, si vous devez mettre à jour plusieurs éléments de manière atomique, vous devez utiliser un mutex ou un autre objet de synchronisation qui fonctionne pour tous les processus. Le mécanisme de mémoire partagée ne contient aucun élément permettant de synchroniser l'accès à la mémoire partagée. Vous devez utiliser les fonctions verrouillées ou un objet de synchronisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top