【问题标题】:Parallel For loops. Are they wait for finish?并行 For 循环。他们在等待完成吗?
【发布时间】:2012-01-06 10:09:59
【问题描述】:

我有两个 for 循环。第二个循环必须在完成第一个循环后开始

那么,如果我使用两个Parallel.For() 循环,第二个循环会在完成第一个循环之后运行吗?

【问题讨论】:

    标签: c# .net parallel-processing


    【解决方案1】:

    是的。 Parallel.For 在所有操作完成之前不会返回。

    如果你跑了

    Parallel.For(0, 5, i => Console.WriteLine("First {0}", i));
    Console.WriteLine("First Finished");
    Parallel.For(0, 5, i => Console.WriteLine("Second {0}", i));
    Console.WriteLine("Second Finished");
    

    输出是

    First 0
    First 2
    First 1
    First 4
    First 3
    First Finished
    Second 0
    Second 4
    Second 3
    Second 2
    Second 1
    Second Finished
    

    整数的顺序会有所不同,但第二个总是在第一个之后。

    【讨论】:

    • 这也是有道理的,因为该方法返回一个 ParallelLoopResult,它只有在所有线程终止后才可用。
    • @GeorgeDuckett 确实如此。这是有道理的,很容易验证。
    • @Mahdi 谷歌它。这意味着可以从多个线程调用它,而不会发生意外情况。例如如果它不是线程安全的,你可能会让控制台线混在一起,例如FiFrist r0st 1。此外,如果您在不知道什么是线程安全的情况下进行并行处理,那么您真的需要查一下。
    • 你在回答中犯了一个错误并行。对于所有任务都结束时返回,这个结束并不总是在它完成时,它也可能是错误或中断
    • 'Parallel.ForEach' 一样吗?
    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2015-07-02
    • 1970-01-01
    • 2021-08-09
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多