我的程序为某些任务创建了一些线程。
我的代码是这样的:
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 可以重复使用。那么,由于在后面的代码中,每个线程都需要知道自己有一个唯一的编号,有没有什么办法可以给线程添加一个名字之类的东西,让每个线程都能获得自己的唯一编号?
感谢您的建议!
最佳答案
If no, maybe a thread finishes and another thread starts with same ManagedThreadId? Is it possible? how to prevent this problem?
是的。托管线程 ID 可以重复使用。它们不是字典状态键的好选择。
除了使用线程 ID 来跟踪状态,您应该考虑使用其他一些唯一值。在您的情况下,“i”在每个循环中都是唯一的 - 为什么不将它用作您的 key ?
关于c# - ManagedThreadID 不是唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596669/