【发布时间】:2010-10-05 17:40:09
【问题描述】:
假设我有一个变量“counter”,并且有多个线程使用 Interlocked 访问和设置“counter”的值,即:
int value = Interlocked.Increment(ref counter);
和
int value = Interlocked.Decrement(ref counter);
我可以假设,Interlocked 所做的更改将在所有线程中可见吗?
如果没有,我应该怎么做才能让所有线程同步变量?
编辑:有人建议我使用 volatile。但是当我将“计数器”设置为 volatile 时,会出现编译器警告“对 volatile 字段的引用不会被视为 volatile”。
当我阅读在线帮助时,它说“通常不应使用 ref 或 out 参数传递 volatile 字段”。
【问题讨论】:
-
是的,互锁递增/递减(在 x86 和 IA-64 上)自动提供所有线程的可见性,因为它具有隐式内存屏障。挥发性不是必需的(尽管它不是非法的)。
标签: c# multithreading visibility interlocked