gpt4 book ai didi

c# - ManagedThreadID 不是唯一的?

转载 作者:太空狗 更新时间:2023-10-29 23:02:01 26 4
gpt4 key购买 nike

我的程序为某些任务创建了一些线程。

我的代码是这样的:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com