考慮這段代碼周圍counter
創建一個封閉:閉合時是否需要互鎖使用?
uint counter = 0xFFFF;
someList.AsParallel().ForEach(a => { uint tmp = ++counter });
(請預留了一下使用並行的foreach內的計數器的明顯的問題)。
將tmp
曾計算爲0x0000或0x1FFFF?
我的理由:爲了從0xFFFF增加counter
到0x10000的要求至少是可以通過多線程中斷兩個字節的CPU指令。如果被中斷,有可能只有一個字節的counter
將被更新 - 它可能暫時被設置爲0x00000或0x1FFFF。
如果我寫了這個爲:
uint counter = 0xFFFF;
someList.AsParallel().ForEach(a => { uint tmp = Interlocked.Increment(counter) });
...?
如果我擺脫AsParallel
,我是否完全安全?