gpt4 book ai didi

c# - 在 C# 中,Interlocked 类中是否有锁或队列?

转载 作者:行者123 更新时间:2023-11-30 14:29:48 25 4
gpt4 key购买 nike

互锁.增量

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com