2010-09-16 5 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, но с использованием всех процессоров параллельно?

Кроме того, при использовании 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..."); });

Также имейте в виду, что выход не будет в порядке, вы ожидаете, что это будет в :)

Удачи !!

Смежные вопросы