什么是Interlocked.Increment实际上在做什么?

Interlocked.Increment似乎是在multithreading代码中需要执行的最标准/最简单的操作之一。

我假设该方法的function是一种排序模式,任何具有线程经验的人都能够复制。

所以基本上我想知道的是,如果有人可以提供Interlocked.Increment方法实际内部执行的完全重复(解释它是如何工作的)? (我已经找到了实际方法的来源但却无法找到它)

根据阿尔巴哈里先生的说法,它做了两件事:

  • 使OS和VM知道操作的primefaces性,因此例如32位系统上64位值的操作将是primefaces的
  • 生成full fence限制互锁变量的重新排序和缓存

看看那个链接 – 它提供了一些很好的例子。

我假设它是一个实现细节,但是查看它的一种方法是检查JIT编译的代码。 请考虑以下示例。

 private static int Value = 42; public static void Foo() { Interlocked.Increment(ref Value); } 

在x86上,它生成以下内容

 lock inc dword  

锁定修饰符锁定总线以防止多个CPU更新相同的数据位置。

在x64上它生成

 lock xadd dword ptr ,eax 

我希望它是InterlockedIncrement64 Win32 API调用的包装器。


编辑:我看到这是一个非常短的回应。 构建一点:很容易复制函数的function,但不是性能。 大多数CPU中都有本机指令为您提供primefaces“互锁交换和添加”指令,因此您希望该指令用于实现您的function,我希望从C#中实现这一目的的最简单方法是进行win32 API调用。 有关该主题的更多背景信息,请查看此白皮书 。