相关疑难解决方法(0)

联锁和不稳定

我有一个变量,我用来表示状态.它可以从多个线程读取和写入.

我正在使用Interlocked.ExchangeInterlocked.CompareExchange改变它.但是我从多个线程中读取它.

我知道volatile可以用来确保变量不在本地缓存,但总是直接从内存中读取.

但是,如果我将变量设置为volatile,则会生成有关使用volatile并使用ref传递给Interlocked方法的警告.

我想确保每个线程都读取变量的最新值而不是某些缓存版本,但我不能使用volatile.

有一个Interlocked.Read 但是它适用于64位类型,并且在紧凑的框架上不可用.它的文档说32位类型不需要它,因为它们已经在一次操作中执行.

如果您使用Interlocked方法进行所有访问,则互联网上有一些声明您不需要使用volatile.但是,您无法使用Interlocked方法读取32位变量,因此您无法使用Interlocked方法进行所有访问.

有没有办法在不使用锁的情况下完成我的变量的线程安全读写?

.net c# mono

70
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

mono ×1