2011-05-23 64 views
1

我認爲這個原子操作比++更快。我只看到有利於Interlocked.Increment的優勢。它有什麼缺點?如果Interlocked.Increment是原子的,爲什麼我應該用++代替?

+7

你爲什麼認爲它比'++'快? – 2011-05-23 13:42:40

+2

你沒有單線程編程? – 2011-05-23 13:42:44

+0

這已經在這裏回答:http://stackoverflow.com/questions/1034070/performance-of-interlocked-increment – Niki 2011-05-23 13:44:14

回答

11

原子意味着它是線程安全的(即一個線程不可能讀取值而另一個線程正在改變它)。由於需要使用線程同步機制,這使得它更慢,而不是更快。如果你不關心線程安全性,你想使用++。 Here是關於++運算符在不同上下文中的相對性能的一些討論。

+0

我剛測試過它,1e8次'++'大概是一秒鐘,這個'Interlocked.Increment'操作的次數在我的PC上使用時間增加了一倍以上。確切地說,是 – 2011-05-23 13:51:58

+0

。你的結果與理論一致。 – jlew 2011-05-23 13:55:08

1

原子並不意味着它更快。事實上,它幾乎肯定會變慢。

在併發編程,一個 操作(或一組操作)是 原子,線性化,不可分割或 不間斷如果它出現在 其餘系統的發生 瞬間。

這僅僅意味着在手術過程中沒有可觀察到的副作用。它沒有說明手術需要多長時間。

相關問題