Interlocked.Increment
似乎是在多线程代码中需要执行的最标准/最简单的操作之一。
我认为该方法的功能是一种排序模式,任何具有线程经验的人都能够复制。
所以基本上我想知道的是,如果有人能够提供Interlocked.Increment
方法实际内部执行的完全重复(以及它是如何工作的解释)? (我已经找到了实际方法的来源但却无法找到它)
答案 0 :(得分:13)
根据Albahari先生的说法,它做了两件事:
full fence
限制互锁变量的重新排序和缓存看看那个链接 - 它提供了一些很好的例子。
答案 1 :(得分:9)
我认为它是一个实现细节,但是查看它的一种方法是检查JIT编译的代码。请考虑以下示例。
private static int Value = 42;
public static void Foo() {
Interlocked.Increment(ref Value);
}
在x86上,它会生成以下内容
lock inc dword <LOCATION>
lock修饰符锁定总线以防止多个CPU更新相同的数据位置。
在x64上生成
lock xadd dword ptr <LOCATION>,eax
答案 2 :(得分:1)
我希望它是InterlockedIncrement64 Win32 API调用的包装器。