2010-09-16 88 views
2

我正在试验并行编程。我有一个正常的循环: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时,需要什么参数?你如何以非常基本的方式使用它?

回答

9

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

希望,它可以帮助

1

我想这是你在找什么:

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

你可以把它变成一个循环的Parallel.For数到100000,但你可能不会满意的结果:)有是分配工作中涉及的重要开销。在这种情况下,你所做的工作在计算上不够密集,不足以抵消多线程的开销。相反,当循环体的计算量非常大(并且不依赖于其他迭代!)时,您会希望使用Parallel.For。

但是,如果你愿意,你仍然可以做到这一点。语法形式:

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

也请记住,输出将不会在你希望它是在:)

好运的顺序!