JYe*_*ton 2 c# collections multithreading
我在C#(List<Thread>)中有一个Threads集合,在某些时间间隔我想得到它们正在积极工作的数量.
目前,我在完成时将各个线程设置为null.因此:
private int AliveThreads()
{
    lock (ThreadCollection)
    {
        return ThreadCollection.Count(t => t != null);
    }
}
我试图用来lock避免错误"收集被修改"但这不起作用.我仍然不时得到这个错误.
还有其他可能更好的东西吗?
我只想使用一个互锁的柜台; 在启动每个线程之前增加此(Interlocked.Increment),并让每个线程在它们退出之前调用Interlocked.Decrement.然后你可以在任何时候使用Thread.VolatileRead来查看有多少是活动的,没有任何集合.
但是,专门用于解决这个问题:如果您正在使用集合,则将项目设置为null的线程也应该锁定:
lock(ThreadCollection)
{
    ThreadCollection[index] = null;
}
柜台对我来说似乎更清洁了.