我有一个用来表示状态的变量。可以从多个线程对其进行读写。
我正在使用Interlocked.Exchange
并对其Interlocked.CompareExchange
进行更改。但是我正在从多个线程中读取它。
我知道volatile
可以用来确保变量不在本地缓存,但始终直接从内存中读取。
但是,如果我将变量设置为volatile,那么它将生成有关使用volatile并使用ref传递给Interlocked方法的警告。
我想确保每个线程都在读取变量的最新值,而不是某些缓存的版本,但是我不能使用volatile。
有一个,Interlocked.Read
但它适用于64位类型,并且在紧凑型框架上不可用。它的文档说,32位类型不需要它,因为它们已经在单个操作中执行过。
如果您使用互锁方法进行所有访问,则互联网上有一些声明不需要波动。但是,您无法使用Interlocked方法读取32位变量,因此无法对所有访问使用Interlocked方法。
有什么方法可以在不使用锁的情况下完成对变量的线程安全读取和写入操作?
lock
,我找不到任何提供此类保证的引用。