Java 原子整数和 C# 互锁之间的差异。增量方法

2022-09-04 22:00:21

我只是想知道,在Java中增加静态变量的方式和在线程环境中增加C#的方式之间有区别吗?

在Java中,你使用原子int:s来执行此操作,在C#中,你使用Interlocked.Incement(ref yourVar)

我这里不是指你写的代码,而是它实际上如何锁定内存并进行实际增量。


答案 1

互锁操作不锁定内存,而是根据操作向指令发出 LOCK 前缀。这会导致处理器断言总线锁定,因此只执行一次指令。您可以进一步查看以下文章


答案 2

在Java的情况下 - “它是如何工作的”取决于执行平台的指令集。我正在阅读(今天早些时候,在等待无休止的操作系统升级完成时),在x86上,AtomicXxx类是使用比较和交换(CAS)指令实现的。