繁体   English   中英

C#-并行For循环:Parallel.For(); -它们如何与在其外部声明的变量一起使用?

[英]C# - Parallel For loops: Parallel.For(); - How do they work with variables declared outside of them?

我有以下代码:

string someVariable;

Parallel.For(0, maxCount, count =>
{
    Parallel.For(0, dimension, row =>
    {
        Parallel.For(0, dimension, col =>
        {
            someVariable = count + " " + row + " " + col;
            DoSomethingIndependent(someVariable);
        });
    });
});

所以我的问题是:在循环外部声明的字符串变量是否与每次迭代无关,或者循环的并行执行是否会因彼此之间的迭代而中断? 我猜想该变量是同时使用到并行线程的,因为它给了我一个“未处理的异常”。 做这个的最好方式是什么? 也许为每个并行迭代使用字符串数组?
提前致谢!

您的问题中的代码有很多错误。

1)没有人在上面的评论中提及此问题,但是someVariable被多个线程写入。 这将导致正确性问题。 您必须在内部循环中声明someVariable ,以便每个任务都有自己的someVariable实例进行更新。

2)声明变量对性能的影响最小。 这与上面引用顺序循环的链接不同。 在这里,编译器无法将可验证的实例移入或移出并行循环,但假设您的循环正在做大量工作,则实例化变量的开销应最小。 如果DoSomethingIndependent没有做实际的工作,那么并行化它无论如何都不会带来性能上的好处。

3)对于这样嵌套的每个循环,使用三个并行是不太有效的。 您最好只在外部循环中为每个循环使用一个并行,然后对内部两个循环使用顺序循环。

4)假设cols参照存储在2D阵列然后某处你应该反转两个内部循环的顺序的一些数据。 请记住,数组以行优先顺序存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM