c# - 使用嵌套的 Parallel.For

标签 c# .net-4.0 task-parallel-library

考虑这个例子:

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/

相关文章:

c# - 杀死进程 Excel C#

c# - 我的 Lazy<> 值工厂中的 InvalidOperationException

c# - await 在异步操作后不恢复上下文?

visual-studio-2010 - 无法将 Firebird DDEX .NET 提供程序集成与 Visual Studio 2010 配合使用

c# - 正确处理任务取消的一般方法

c - C 的任务库?

c# - 错误 CS0019 运算符 '==' 无法应用于类型 'HttpStatusCode' 和 'int' 的操作数

c# - 使用模型类的 Asp.net MVC 下拉列表绑定(bind)

c# - 为多个 getter 执行的公共(public)操作

.net - 即时修改 app.config