我只是想知道,在线程环境中 Java 和 C# 中递增静态变量的方式有区别吗?
在 Java 中,您使用原子 int:s 来进行此操作,而在 C# 中,您使用 Interlocked.Incement(ref yourVar)
我并不是指您编写的代码,而是指它实际上如何锁定内存并进行实际增量。
互锁操作不会锁定内存,而是根据操作向指令发出 LOCK 前缀。这会导致处理器断言总线锁定,因此仅执行一次指令。 您可以进一步看下面的文章
由于链接不再有效,这里是存档版本
https://web.archive.org/web/20140325112655/http://lists.canonical.org/pipermail/kragen-tol/1999-August/000457.html
就 Java 而言 - “它如何工作”取决于执行平台的指令集。我正在阅读(今天早些时候,在等待无休止的操作系统升级完成时),x86 上的 AtomicXxx 类是使用比较和交换 (CAS) 指令实现的。