2012-10-08 99 views
9

這是保證是線程安全的/不會產生意想不到的結果嗎?Interlocked.Increment一個整數數組

Interlocked.Increment(ref _arr[i]); 

我的直覺告訴我這不是,即讀取_arr [I]的值沒有被保證是「原子」與實際遞增。

如果我認爲這是錯的,我該如何解決這個問題?謝謝。

+0

誰或什麼的'_arr [I]'讀書的價值?這個代碼不讀它,它增加其原子,因爲這是'Interlocked.Increment '確實。 –

回答

13

假設沒有任何變化i_arr,應該沒問題。

一個數組被視爲變量的集合;無論該元素或同一陣列中的其他元素髮生了什麼,互鎖增量都應該正常工作。

1

如果事情異步改變_arri然後,我同意你的觀點,不,查找_arr[i]是不是原子本身。

然而,如喬恩說,一旦你已確定的(一些)_arr將被原子地遞增,獨立於其它動作在陣列(一個或多個)的其他元件發生的,或進一步改變爲元素_arri

如果_arri正在異步改變,所有對它們的引用(讀取和寫入)需要一個lock內一個共同的對象。 (然後你就可以將Interlocked.Increment減少到一個簡單的++