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

Max*_*ich 19 c# multithreading interlocked

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

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

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

小智 13

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

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

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


Bri*_*sen 9

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

private static int Value = 42;
public static void Foo() {
   Interlocked.Increment(ref Value);
}
Run Code Online (Sandbox Code Playgroud)

在x86上,它生成以下内容

lock inc dword <LOCATION>
Run Code Online (Sandbox Code Playgroud)

所述改性剂锁定总线,以防止多个CPU从更新相同的数据的位置.

在x64上它生成

lock xadd dword ptr <LOCATION>,eax
Run Code Online (Sandbox Code Playgroud)

  • 如何`lock inc dword <location>`处理返回值? (2认同)