2

我正在研究多线程程序,我想检查所有线程是否都已完成,然后我有一个全局List<bool> tr线程,当我创建一个新线程时,我false向它添加一个,并在线程结束时true通过传递当前的索引来实现线程列表中线程的布尔值。

这是我开始踩踏的循环:

for (int i = 0; i < t; i++)
{
    int n = int.Parse(r.ReadLine());
    List<int> nums = (from s in r.ReadLine().Split(' ') select int.Parse(s)).ToList();
    tr.Add(false);
    new Thread(() => Process(nums, i)).Start();
}

这是Process方法:

public static void Process(List<int> Data, int tNum)
{
    output.Add(ProcessSums(ProcessSubs(Data)).Distinct().Count());
    tr[tNum] = true;
}

问题出在其中一个线程中,当tr[tNum] = true;运行什么时它会抛出ArgumentOutOfRangeException并说 the Index was out of range.but the length of tris97和 the indexis 95。我不知道问题是什么,但我真的需要帮助。有谁能够帮我?!?

4

1 回答 1

1

如果这不起作用,请发表评论,我将删除而不是将其标记下来,因为评论太多了,我没有测试,但我认为这真的和丹尼尔的评论一样简单

资源

int i=0;
Parallel.For (0, t-1, i,=>
{
    int n = int.Parse(r.ReadLine());
    List<int> nums = (from s in r.ReadLine().Split(' ') select int.Parse(s)).ToList();
    Process(nums, i);
});
于 2012-08-19T00:25:20.060 回答