我在 C# ( List<Thread>
) 中有一个线程集合,我想在特定的时间间隔内获得正在积极工作的线程的数量。
目前我在完成时将各个线程设置为空。因此:
private int AliveThreads()
{
lock (ThreadCollection)
{
return ThreadCollection.Count(t => t != null);
}
}
我正在尝试使用 lock
以避免出现错误“集合已修改”,但这不起作用。我仍然不时收到此错误。
还有其他更好的方法吗?
最佳答案
我只想使用联锁计数器;在开始每个线程之前 增加此 (Interlocked.Increment),并让每个线程在退出之前调用 Interlocked.Decrement。然后您可以随时使用 Thread.VolatileRead 来查看有多少是事件的,而无需任何收集。
但是,特别要解决这个问题:如果您使用的是集合,则将项目设置为 null 的线程也应该锁定:
lock(ThreadCollection)
{
ThreadCollection[index] = null;
}
我觉得柜台干净多了。
关于c# - 如何计算数组中的事件线程并避免 "collection was modified"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9182929/