J'ai une variable que j'utilise pour représenter l'état. Il peut être lu et écrit à partir de plusieurs threads.
Je suis l'aide d' Interlocked.Exchange
et Interlocked.CompareExchange
de la changer. Cependant, je vais le lire à partir de plusieurs threads.
Je sais qu' volatile
peut être utilisé pour s'assurer que la variable n'est pas mis en cache localement, mais qui se lit toujours directement à partir de la mémoire.
Cependant si j'ai mis la variable volatile ensuite, il génère un message d'avertissement sur l'utilisation de volatiles et de passage à l'aide de ref pour le Contrefil méthodes.
Je veux m'assurer que chaque thread est la lecture la plus récente de la valeur de la variable et non une version mise en cache, mais je ne peux pas utiliser volatile.
Il y a un Interlocked.Read
mais c'est pour la version 64 bits types et n'est pas disponible sur le compact framework. La documentation car il dit qu'il n'est pas nécessaire pour la version 32 bits types car ils sont déjà effectué en une seule opération.
Il y a des déclarations faites à travers l'internet qui vous n'avez pas besoin volatile si vous utilisez le Contrefil méthodes pour tous vos accès. Cependant, vous ne pouvez pas lire un 32 bits variable à l'aide de la Contrefil méthodes, donc il n'y a aucun moyen que vous pouvez utiliser Contrefil méthodes pour tous vos accès.
Est-il un moyen pour accomplir le "thread-safe" lire et écrire de ma variable sans l'aide de serrure?