2011-05-27 15 views
12

我只是想知道,你是如何增加Java和C#中的靜態變量在線程環境中的區別?Java原子整數和C#的區別Interlocked.Increment方法

在Java中使用原子INT:■使該操作並在C#中使用Interlocked.Incement(REF yourVar)

我這個不意味你寫的代碼,但它實際上是如何鎖定內存和做實際的增量。

+2

這不是一個語言問題。不同版本或不同實現或虛擬機的不同平臺目標可能會影響此類功能的內部行爲。 – CodesInChaos 2011-05-27 10:15:05

+0

其實java非常非常基於CAS(在它的核心),它也提供了CAS類似的原語。因此,impl:LL/CS或自然CAS並不重要。 C#使用WinAPI互鎖函數impl。如果內存服務良好,它會添加w/LOCK前綴。 – bestsss 2011-05-27 12:24:58

回答

9

聯鎖操作不會鎖定內存,而是根據操作向指令發出LOCK前綴。這會導致處理器斷言總線鎖定,所以只能執行一次指令。 您可以進一步看看following article

+4

+1,這不是你正在尋找的鎖。 – user7116 2011-05-27 13:52:58

2

在Java的情況下 - 「它是如何工作的」取決於執行平臺的指令集。我正在閱讀(今天早些時候在等待無休止的操作系統升級完成時),它使用比較和交換(CAS)指令來實現x86 AtomicXxx類。

+0

是的,原子的東西是循環(如果(cas)中斷)在java中。在C#中聯鎖可以通過LOCK ADD實現。 – bestsss 2011-05-27 12:16:28