我正在尝试并行编程。我有一个正常的循环:
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
时,需要哪些参数?你会如何以一种非常基本的方式使用它?
答案 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..."); });
另请注意,输出不会按照您期望的顺序输出:)
祝你好运!!