Java原子整数和C# Interlocked.Increment方法的区别

问题描述 投票:0回答:2

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

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

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

c# java multithreading thread-safety
2个回答
9
投票

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

由于链接不再有效,这里是存档版本
https://web.archive.org/web/20140325112655/http://lists.canonical.org/pipermail/kragen-tol/1999-August/000457.html


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.