Parallel.For与for循环相反

时间:2010-09-16 04:12:45

标签: c# c#-4.0 parallel-processing parallel-for

我正在尝试并行编程。我有一个正常的循环:

for (int i = 0; i < 100000; i++)
{
    Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
        Thread.CurrentThread.ManagedThreadId);
}

此循环只会将数字增加到100000

我是否可以使用此for循环并将其转换为Parallel.For循环以将数字计算为100000,但并行使用所有CPU?

此外,使用Parallel.For时,需要哪些参数?你会如何以一种非常基本的方式使用它?

3 个答案:

答案 0 :(得分:9)

如果你想使用Parallel.For,你需要一些同步,也可能使用锁。 如果你真的想使用Parallel.For,我建议你按照链接,它精美地解释Parallel.For ... http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

希望,这有帮助

答案 1 :(得分:1)

我认为这就是你要找的东西:

Parallel.For(0, 10000, i =>
{
   Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
      Thread.CurrentThread.ManagedThreadId);
});

答案 2 :(得分:1)

你可以把它变成一个Parallel.For循环来计算到100000,但你可能不会对结果感到满意:)分配工作会产生很大的开销。在这种情况下,您正在进行的工作计算密集程度不足以抵消多线程的开销。相反,当循环的主体计算密集时(并且不依赖于其他迭代!)时,您可能希望使用Parallel.For。

但是,如果你愿意,你仍然可以这样做。语法的格式为:

Parallel.For(0, 100000, (i) => { Console.WriteLine("Thread..."); });

另请注意,输出不会按照您期望的顺序输出:)

祝你好运!!