有没有什么实际的原因来解释这个问题.NET团队决定在Interlocated中不支持布尔值.交换操作?

其中一个使用示例是,当您希望保证某些代码只执行一次,并且希望使用布尔标志来实现这一点时.

推荐答案

是的,有一个很好的理由.联锁方法的实现需要处理器级别的低级别支持.例如,参见this answer.当你定义一个架构不可知的框架时,这是一个问题.

在本机处理器字长的一小部分数据类型上实现互锁类支持的低锁技术是困难的.10多年前流行的RISC CPU设计方法强烈阻碍了它的发展.操作数大小和本机内存总线宽度之间的不匹配使其很难实现.英特尔的x86架构仍然在您的膝上,不走捷径已经存活了30年,这也是原因之一.更多关于RISC wikipedia article的背景信息.

.net相关问答推荐

为什么$NULL在ForEach-Object{}和Foreach()中的行为不同?

如何在dotnet中使用OpenTelemetry Prometheus导出器导出多个版本的度量?

WinForm Task.Wait :为什么它会阻塞 UI?

与 Datagrid 的 SelectedItem 链接时的 WPF RadioButton 绑定问题

使用 PostAsJsonAsync C# 时出现错误请求

为什么(真的吗?)List 实现所有这些接口,而不仅仅是 IList

在 ASP.NET MVC 中我可以在哪里放置自定义类?

一种消耗(所有字节)BinaryReader 的优雅方式?

XmlNode 值与内部文本

如何使用c#从excel文件中读取数据

struct 中需要覆盖什么以确保平等正常运行?

如何使用 log4net 记录跟踪消息?

运算符重载 ==, !=, Equals

HashSet 是否保留插入顺序?

创建多个线程并等待所有线程完成

软件包版本始终为 1.0.0,带有 dotnet pack

单元测试 C# 保护方法

在 C# 中使用 Bitmap 对象查找图像格式

如何判断uri字符串是否有效

从 bcp 客户端接收到 colid 6 的无效列长度