Ich habe eine Variable, mit der ich den Zustand darstelle. Es kann aus mehreren Threads gelesen und beschrieben werden.
Ich benutze Interlocked.Exchange
und Interlocked.CompareExchange
um es zu ändern. Ich lese es jedoch aus mehreren Threads.
Ich weiß, dass volatile
dies verwendet werden kann, um sicherzustellen, dass die Variable nicht lokal zwischengespeichert wird, sondern immer direkt aus dem Speicher liest.
Wenn ich die Variable jedoch auf flüchtig setze, wird eine Warnung über die Verwendung von flüchtig und die Übergabe mit ref an die Interlocked-Methoden generiert.
Ich möchte sicherstellen, dass jeder Thread den neuesten Wert der Variablen liest und nicht eine zwischengespeicherte Version, aber ich kann flüchtig nicht verwenden.
Es gibt ein, Interlocked.Read
aber es ist für 64-Bit-Typen und ist auf dem kompakten Framework nicht verfügbar. Die Dokumentation dazu besagt, dass es für 32-Bit-Typen nicht benötigt wird, da sie bereits in einer einzelnen Operation ausgeführt werden.
Über das Internet werden Aussagen gemacht, dass Sie nicht flüchtig sind, wenn Sie die Interlocked-Methoden für Ihren gesamten Zugriff verwenden. Sie können jedoch keine 32-Bit-Variable mit den Interlocked-Methoden lesen, sodass Sie Interlocked-Methoden auf keinen Fall für Ihren gesamten Zugriff verwenden können.
Gibt es eine Möglichkeit, das thread-sichere Lesen und Schreiben meiner Variablen ohne Verwendung der Sperre zu erreichen?
lock
und ich kann keine Referenz finden, die solche Garantien gibt.