Mah*_*asi 5 c# multithreading dictionary
我的程序为某些任务创建了一些线程.
我的代码是这样的:
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);
}
Run Code Online (Sandbox Code Playgroud)
但有时,如果SubNNs.Count()变大(10-20),程序会抛出此异常:"已添加具有相同键的项目." 在线threadStates.Add(tt.ManagedThreadId, 0);
为什么我给出这个错误?不是ManagedThreadId唯一的吗?如果是,我该怎么办?
如果不是,也许一个线程完成而另一个线程以相同的方式开始ManagedThreadId?可能吗?如何防止这个问题?
还是有另一个问题?
编辑:用户说ManagedThreadId可以重复使用.所以,因为在代码的后面部分,每个线程需要知道自己有一个唯一的数字,有没有办法在线程中添加类似名称的东西,每个线程都可以得到它唯一的数字?
谢谢你的任何建议!
如果不是,可能是一个线程完成而另一个线程以相同的ManagedThreadId开头?可能吗?如何防止这个问题?
是.托管线程ID可以重复使用.它们不是字典状态键的好选择.
您应该考虑使用其他一些唯一值,而不是使用线程ID来跟踪状态.在您的情况下,"i"每个循环是唯一的 - 为什么不将它用作您的密钥?
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |