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;
}

問題はスレッドの1つにあり、tr[tNum] = true;何を実行するかがスローさArgumentOutOfRangeExceptionれて言われますIndex was out of range.が、の長さはtris97indexis95です。何が問題なのかわかりませんが、本当に助けが必要です。誰か助けてもらえますか?!?

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 に答える