【发布时间】:2011-12-21 21:32:38
【问题描述】:
我的程序为某些任务创建了一些线程。
我的代码是这样的:
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 被回收。
标签: c# multithreading dictionary