锁是否会产生一堆线程?/这是避免锁定的正确方法吗?

Ari*_*lin 1 c# locking

我有一个程序,从非托管代码接收每秒大约500到700次的数据.这些数据中的一些是有用的,需要进行处理,其中一些是无用的,并立即得到反感.为了确定收到的数据是否有用,我使用了一个字符串列表.我的问题/问题是:当我使用List上的锁来删除部分或全部条目时,我会得到一大堆等待搜索List的线程吗?

因为删除整个列表或它的一部分不是连续使用我现在使用静态布尔值.当我开始删除时,我将布尔值设置为false,并且在搜索列表之前,所有数据都会被拒绝.当我完成后,我将布尔值恢复为true.这是一个糟糕的解决方法还是有更好的解决方案?(我也问这个,因为此时测试非常耗时)

编辑

该程序用于检查列表中的字符串是否正确.非托管代码发送数据,这发生在新线程上.如果数据有用,则会显示该数据,用户可以对此进行验证.如果数据结果显示但没有用,则用户可以从列表中删除主线程上发生的字符串.

Rob*_*ine 11

是的 - 你可能会得到"大量的线程".

我建议使用读取器/写入器语义来锁定锁,而不是单个"残酷"的独占锁.这应该使许多读者能够同时读取您的数据.只有当作者出现更新数据时才会进行独占锁定.如果写入次数相对于读取次数较少,则很少有线程"备份".

在.NET ReaderWriterLockSlim是一种可能性,但我衷心建议你看一下OneManyResourceLock杰弗里里希特的Power线程库