這是保證是線程安全的/不會產生意想不到的結果嗎?Interlocked.Increment一個整數數組
Interlocked.Increment(ref _arr[i]);
我的直覺告訴我這不是,即讀取_arr [I]的值沒有被保證是「原子」與實際遞增。
如果我認爲這是錯的,我該如何解決這個問題?謝謝。
這是保證是線程安全的/不會產生意想不到的結果嗎?Interlocked.Increment一個整數數組
Interlocked.Increment(ref _arr[i]);
我的直覺告訴我這不是,即讀取_arr [I]的值沒有被保證是「原子」與實際遞增。
如果我認爲這是錯的,我該如何解決這個問題?謝謝。
假設沒有任何變化i
或_arr
,應該沒問題。
一個數組被視爲變量的集合;無論該元素或同一陣列中的其他元素髮生了什麼,互鎖增量都應該正常工作。
如果事情爲異步改變_arr
或i
然後,我同意你的觀點,不,查找_arr[i]
是不是原子本身。
然而,如喬恩說,一旦你已確定的(一些)_arr
,它將被原子地遞增,獨立於其它動作在陣列(一個或多個)的其他元件發生的,或進一步改變爲元素_arr
或i
。
如果_arr
或i
正在異步改變,所有對它們的引用(都讀取和寫入)需要一個lock
內一個共同的對象。 (然後你就可以將Interlocked.Increment
減少到一個簡單的++
。
誰或什麼的'_arr [I]'讀書的價值?這個代碼不讀它,它增加其原子,因爲這是'Interlocked.Increment '確實。 –