考虑这个例子:
var x = 0;
for (var i = 0; i < 100; i++ )
{
for (var a = i+1; a < 100; a++)
x += 1;
}
当打印 x 时,我们总是得到 4950。如果我想并行化它呢?
这是我想出来的
Parallel.For(0, 100, i => Parallel.For(i + 1, 100, a => { x += 1; }));
但是我每次运行它时都不会打印 4950。为什么?
最佳答案
Parallel Extensions 以近乎命令式的语法帮助您创建、分配、运行和集合点。它不做的是处理各种线程安全(pitfalls 之一)。您正在尝试让并行线程同时更新单个共享变量。要正确地做这样的事情,你必须引入例如锁定。
我不确定您要做什么。我假设您的代码只是一个占位符或实验。并行化仅在您可以隔离不同的工作时才适用;不是当你经常需要与共享数据会合时。
关于c# - 使用嵌套的 Parallel.For,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280688/