我将通过Volatile.Write
对变量实现非阻塞写入。我应该对此变量的所有消费者使用Volatile.Read
,还是没有必要?如果我像往常一样阅读这个变量(没有任何障碍),可能会产生什么样的影响?关于Interlocked.Exchange
答案 0 :(得分:1)
来自the documentation of the Volatile
class:
调用其中一种方法只会影响单个内存访问。要为字段提供有效的同步,对字段的所有访问都必须使用Volatile.Read和Volatile.Write。
可能出错的一个问题是读者可能会将值一次读入寄存器,然后继续读取此缓存副本,而无需检查该值是否已更改。
与Interlocked.Exchange
相同。
通常,处理这类情况的最佳方法是将变量完全封装在一个类中,该类提供一个getter-setter对,通过Volatile
或Interlocked
访问变量,从而保证该变量永远不会被任何其他方式访问。