gpt4 book ai didi

c# - C#如何保证读/写操作的原子性?

转载 作者:太空狗 更新时间:2023-10-29 17:33:03 25 4
gpt4 key购买 nike

C# 规范在第 5.5 节中规定了对某些类型进行读写(即 boolcharbytesbyte , short, ushort, uint, int, float,和引用类型)保证是原子的。

这激起了我的兴趣。你怎么能那样做?我的意思是,我的低级个人经验只告诉我,如果我想让读取和写入看起来是原子的,我可以锁定变量或使用屏障;如果每次读/写都必须这样做,那将是一个性能 killer 。然而 C# 做了一些具有类似效果的事情。

也许其他语言(如 Java)可以做到这一点。我真的不知道。我的问题并不是真正针对特定语言,只是我知道 C# 会这样做。

我知道它可能必须处理某些特定的处理器指令,并且可能无法在 C/C++ 中使用。但是,我仍然想知道它是如何工作的。

[编辑] 说实话,我相信在某些情况下读取和写入可能是非原子的,就像一个 CPU 可以访问一个内存位置,而另一个 CPU 正在那里写入。这是否仅在 CPU 无法一次处理所有对象时才会发生,例如因为它太大或因为内存未在正确的边界上对齐?

最佳答案

这些类型保证原子性的原因是因为它们都是 32 位或更小。由于 .NET 仅在 32 位和 64 位操作系统上运行,因此处理器架构可以在单个操作中读取和写入整个值。这与 32 位平台上的 Int64 形成对比,后者必须使用两个 32 位操作进行读取和写入。

我不是真正的硬件专家,所以如果我的术语让我听起来像个 clown ,我深表歉意,但这是基本思想。

关于c# - C#如何保证读/写操作的原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076461/

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