有没有什么实际的原因来解释这个问题.NET团队决定在Interlocated中不支持布尔值.交换操作?
其中一个使用示例是,当您希望保证某些代码只执行一次,并且希望使用布尔标志来实现这一点时.
有没有什么实际的原因来解释这个问题.NET团队决定在Interlocated中不支持布尔值.交换操作?
其中一个使用示例是,当您希望保证某些代码只执行一次,并且希望使用布尔标志来实现这一点时.
是的,有一个很好的理由.联锁方法的实现需要处理器级别的低级别支持.例如,参见this answer.当你定义一个架构不可知的框架时,这是一个问题.
在本机处理器字长的一小部分数据类型上实现互锁类支持的低锁技术是困难的.10多年前流行的RISC CPU设计方法强烈阻碍了它的发展.操作数大小和本机内存总线宽度之间的不匹配使其很难实现.英特尔的x86架构仍然在您的膝上,不走捷径已经存活了30年,这也是原因之一.更多关于RISC wikipedia article的背景信息.