私のプログラムは、いくつかのタスクのためにいくつかのスレッドを作成します。ManagedThreadIDは一意ではありませんか?
私のコードは次のようである:
Dictionary<int, double> threadStates = new Dictionary<int, double>();
for (int i = 0; i < SubNNs.Count(); i++)
{
Thread tt = new Thread(StartTrainingSubs);
threadStates.Add(tt.ManagedThreadId, 0);
tt.Priority = ThreadPriority.Highest;
tt.Start(i);
}
しかしSubNNs.Count()
は(10-20)大きくなると、時々、プログラムがこの例外をスロー:「同じキーを持つ項目が既に追加されています。」行番号threadStates.Add(tt.ManagedThreadId, 0);
なぜこのエラーが発生しますか? ManagedThreadId
は一意ではありませんか? 「はい」の場合、どうすればよいですか?
もしそうでなければ、スレッドが終了し、別のスレッドが同じManagedThreadId
で始まるかもしれませんか?出来ますか?どのようにこの問題を防ぐには?
他にも問題がありますか?
編集:ユーザーは、ManagedThreadIdを再利用できると述べています。したがって、コードの後半部分では、各スレッドが固有の番号で自分自身を知る必要があるため、スレッドに名前のようなものを追加して、すべてのスレッドがその固有の番号を取得できる方法はありますか?
ありがとうございました!
はい、スレッドIDはリサイクルされます。 –