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