2

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

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 吗?

另外,当使用 a 时Parallel.For,需要什么参数?您将如何以非常基本的方式使用它?

4

3 回答 3

10

如果要使用 Parallel.For,则需要进行一些同步,也可能使用锁。如果你真的想使用 Parallel.For,我建议你点击链接,它很好地解释了 Parallel.For... http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

希望能帮助到你

于 2010-09-16T05:29:03.940 回答
1

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

Parallel.For(0, 10000, i =>
{
   Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
      Thread.CurrentThread.ManagedThreadId);
});
于 2010-09-16T04:28:26.913 回答
1

您可以将其转换为 Parallel.For 循环以计数到 100000,但您可能不会对结果感到满意 :) 分配工作涉及大量开销。在这种情况下,您所做的工作计算量不足以抵消多线程的开销。相反,当循环体的计算量非常大(并且不依赖于其他迭代!)时,您可能希望使用 Parallel.For。

但是,如果您愿意,您仍然可以执行此操作。语法形式如下:

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

另请记住,输出不会按照您期望的顺序排列:)

祝你好运!!

于 2010-09-16T04:29:21.903 回答