互锁.增量
Increments a specified variable and stores the result, as an atomic operation.
也就是说,当多个线程同时调用时,结果也是对的。
但我很好奇它是如何实现的。当两个线程同时调用时,它们之间有先后顺序吗?比如一个线程先调用它,另一个线程再调用它。像一个队列。
我的看法对吗?
最佳答案
抖音对这样的方法有特定的认识。必要的,因为它们的实现是高度特定于处理器的。
对于 x86 和 x64 抖动,它会将方法调用替换为 LOCK XADD
机器代码指令。 Intel 处理器上可用的特定指令,用于自动递增变量。极端情况是在 long 类型的变量上使用它,在 32 位模式下,抖动会生成对 CLR 内部辅助方法的调用以完成工作。命名为 COMInterlocked::ExchangeAdd64()
。它又使用汇编代码来使用 x86 处理器上可用的 LOCK CMPXCHG8B
机器代码指令。在 ARM 或 Itanium 处理器上它会是另外一种东西,我没有现成的可供检查的东西。
您可以通过使用 Debug + Windows + Disassembly 调试器窗口查看生成的机器代码来自己发现这些细节。
关于c# - 在 C# 中,Interlocked 类中是否有锁或队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25016681/