Les fonctions Interlocked * sont-elles utiles sur la mémoire partagée?
-
08-07-2019 - |
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.
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.