gpt4 book ai didi

.net - 缺少来自 .Net System.Threading.Interlocked 的预期命令

转载 作者:行者123 更新时间:2023-12-04 06:29:32 25 4
gpt4 key购买 nike

.Net System.Threading.Interlocked 类主要用于提供 ASM 前缀 LOCK 的功能。

但是,我正在挠头想知道为什么 Microsoft 限制了支持的命令的数量。我认为这是一个“C#”问题,但快速浏览 MSDN 纠正了这个想法。这是 .Net 限制。

例如,没有 Interlocked.Or,但在 ASM 中可以松散地说 LOCK OR eax,ebx。那么为什么不 Interlocked.Or(ref x, 10)。

这对我来说毫无意义。为什么没有等效的 LOCK OR 但它们确实有 LOCK ADD。前者非常有用。

所以我检查了 GCC,果然,它就在那里。每一个兼容的 LOCK 命令:GCC atomic commands

谁能解释一下为什么 MS 会省略大多数启用 x86 LOCK 的命令?

最佳答案

The .Net System.Threading.Interlocked class is primarily intended to offer the features of the ASM prefix LOCK.



不,它主要用于提供对变量的原子操作,包括内存屏障。

从文档:

The methods of this class help protect against errors that can occur when the scheduler switches contexts while a thread is updating a variable that can be accessed by other threads, or when two threads are executing concurrently on separate processors. The members of this class do not throw exceptions.



现在碰巧 LOCK 指令也提供这些功能,但没有明确尝试模仿 LOCK 指令的所有功能。如果这是意图,您不认为会提到该说明吗?

我怀疑 API 设计者决定他们将提供最常用的原子操作 - 而不是查看 LOCK 指令并决定省略什么。

就像语言特性一样,API 特性也有与之相关的成本,每个特性都需要赢得一席之地。 Interlocked无论如何是一个很少使用的类 - 我怀疑需要 Interlocked.Or 的开发人员数量确实会非常小。

另外,请记住,.NET 不仅可以在 x86 上运行。例如,我不知道 Windows Phone 7 处理器(我猜是 ARM)中的指令是否具有与 x86 LOCK 指令相同的功能。

关于.net - 缺少来自 .Net System.Threading.Interlocked 的预期命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607147/

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