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