Tag: 互锁增量

读取由Interlocked在其他线程上更新的int

(这是重复: 如何正确读取Interlocked.Increment’ed int字段?但是,在阅读了答案和评论后,我仍然不确定正确的答案。) 有一些我不拥有的代码,并且无法更改为使用在几个不同线程中增加int计数器(numberOfUpdates)的锁。 所有来电均使用: Interlocked.Increment(ref numberOfUpdates); 我想在我的代码中读取numberOfUpdates。 既然这是一个int,我知道它不会撕裂。 但是,确保我获得最新价值的最佳方法是什么? 看起来我的选择是: int localNumberOfUpdates = Interlocked.CompareExchange(ref numberOfUpdates, 0, 0); 要么 int localNumberOfUpdates = Thread.VolatileRead(numberOfUpdates); 两者都可以工作(无论优化,重新排序,缓存等,都可以提供最新的价值)? 一个优先于另一个? 还有第三种选择更好吗?