最佳答案
我有一个用来表示状态的变量。可以从多个线程读写它。
我使用 Interlocked.Exchange
和 Interlocked.CompareExchange
来改变它。但是我从多个线程读取它。
我知道 volatile
可以用来确保变量不是本地缓存的,而是总是直接从内存中读取。
但是,如果我将变量设置为 volatile,那么它将生成一个关于使用 volatile 和使用 ref 传递给 Interlock 方法的警告。
我希望确保每个线程读取的是变量的最新值,而不是某个缓存版本,但是我不能使用 volic。
有一个 Interlocked.Read
,但它适用于64位类型,并且在紧凑的框架中不可用。有关它的文档说,32位类型不需要它,因为它们已经在单个操作中执行。
互联网上有一些声明说,如果你使用联锁方法进行所有的访问,你就不需要易失性。但是,您不能使用 Interlock 方法读取32位变量,因此不可能对所有访问都使用 Interlock 方法。
有没有什么方法可以不使用 lock 实现线程安全的变量读写?