代码之家  ›  专栏  ›  技术社区  ›  abenci

并联。用于中断

  •  7
  • abenci  · 技术社区  · 15 年前

    假设您有一个1000个随机整数的数组,您需要循环查找它,例如68。

    在四核CPU上使用新的parallel.for将大大提高速度,使每个内核只工作250个阵列项。

    问题是:当满足以下条件时,是否可以中断并行的for循环?

    if (integerArray[i] == 68)
    
       break;
    

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  9
  •   Lasse Espeholt    15 年前

    如果您希望在当前执行的迭代完成后停止(但将执行当前执行之前的迭代-也就是说,索引较低的迭代=i)

    Parallel.For(0, 100, (i, s) =>
        {
            s.Break();
        });
    

    或者,如果您希望在当前操作之后停止,并且在此之前的交互操作(就index=i而言)也应该停止

    Parallel.For(0, 100, (i, s) =>
        {
            s.Stop();
        });
    

    但是在这两种情况下,如果迭代需要一段时间,那么检查是否应该中止工作是一个好的实践。

    s.ShouldExitCurrentIteration
    

    在这里阅读更多 Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

        2
  •  2
  •   Mathias    15 年前

    在我看来,您应该研究plinq(parallel linq)来执行并行查询,而不是并行for。
    http://msdn.microsoft.com/en-us/library/dd460688.aspx

    推荐文章