Sind Verriegeln * Funktionen auf gemeinsam genutzten Speicher nützlich?
-
08-07-2019 - |
Frage
Zwei Windows-Prozesse haben Speicher die gleiche freigegebene Datei abgebildet. Wenn die Datei von Zählern besteht, ist es angebracht, die Interlocked*
Funktionen (wie InterlockedIncrement
) zu verwenden, um diese Zähler zu aktualisieren? Werden Personen, die Zugang über Prozesse synchronisieren? Oder brauche ich wie ein Mutex etwas schwerer, benutzen? Oder vielleicht der Shared-Memory-Mechanismus selbst gewährleistet eine konsistente Ansichten.
Lösung
MSDN :
...
Die Interlocked API
Die verzahnt Funktionen bieten eine einfacher Mechanismus zum Synchronisieren Zugriff auf eine Variable, die durch geteilt mehrere Threads. Sie auch durchführen Operationen auf Variablen in einem Atom Weise. Die Fäden unterschiedlicher Prozesse können diese Funktionen verwenden, wenn die Variablen im gemeinsam genutzten Speicher.
Also, ja, es ist sicher mit dem Shared-Memory-Ansatz.
Andere Tipps
Die ineinandergreifenden Funktionen bestimmt sind, für genau diese Art der Verwendung.
http://msdn.microsoft.com/en-us/ Bibliothek / ms684122.aspx :
Die Fäden unterschiedlicher Prozesse können diese Funktionen nutzen, wenn die Variablen im gemeinsam genutzten Speicher sind.
Natürlich, wenn Sie mehr als ein Element atomar aktualisiert haben müssen, müssen Sie mit einem Mutex oder einem anderen Synchronisationsobjekt gehen, die über Prozesse hinweg funktioniert. Es gibt nichts, eingebaut in den gemeinsam genutzten Speichermechanismus Synchronisation für den Zugriff auf den gemeinsam genutzten Speicher zu schaffen -. Sie werden die verriegelten Funktionen oder ein Synchronisationsobjekt verwenden müssen