我对使用LINQ
AsParallel()
的并发性有疑问。
假设我有以下代码:
int counter = 0;
someList.AsParallel().ForEach(item => {
doStuff();
counter++;
});
我在网上找不到太多...
这样做是安全的吗?有更好的方法吗?
我应该为counter
做一些锁定动作吗?
预先感谢
答案 0 :(得分:6)
这样做是安全的吗? (
counter++
)
否。
一开始没有线程安全,只有单线程代码。
并行操作时,您应确保所有内容都是线程安全的。
在这种情况下:
//counter++;
Interlocked.Increment(ref counter);
我们看不到DoStuff()
在做什么。所有调用都应独立(或使用锁定形式)。