【发布时间】:2014-03-28 22:18:04
【问题描述】:
是否可以并行化一个循环长度增加的循环?
List<int> list = new List<int>() { 0, 1 };
for (int i = 0; i < list.Count; i++)
//Parallel.For(0, list.Count, (i) =>
{
Console.WriteLine(list[i]);
if (i == 0) list.Add(2);
}//);
//foreach (int i in list)
//Parallel.ForEach(list, (i) =>
//{
// Console.WriteLine(i);
// if (i == 0) list.Add(2);
//}//);
Console.ReadLine();
在这个简单的例子中,预期的输出是:
0
1
2
上面的代码与串行“for”一起工作正常,但由于集合被修改,串行“foreach”失败。对于这两种并行实现,代码都已完成,但输出缺少最终的“2”。
【问题讨论】:
-
您可以将代码拆分为工作项的线程安全列表和一些可以多线程处理工作项的代码。使用“下一个”工作项的指针和一些锁定,你应该没问题。