我有一个程序每秒从非托管代码接收数据大约 500 到 700 次。其中一些数据是有用的,需要进行处理,而其中一些是无用的,会立即被丢弃。为了确定接收到的数据是否有用,我使用了一个字符串列表。
我的问题/问题是:当我在列表上使用锁来删除部分或全部条目时,我会得到一大堆等待搜索列表的线程吗?
因为不连续使用删除整个列表或部分列表,所以我现在使用静态 bool 值。当我开始删除时,我将 bool 值设置为 false,并且在搜索列表之前将忽略所有数据。完成后,我将 bool 值恢复为真。
这是一个很好的解决方法还是有更好的解决方法?
(我也在问这个问题,因为此时测试非常耗时)
编辑
该程序用于检查列表中的字符串是否正确。非托管代码发送数据,这发生在新线程上。如果数据有用,它就会显示出来,用户可以验证这一点。如果数据结果显示但没有用,用户可以从主线程上发生的列表中删除字符串。
最佳答案
是的 - 你很可能会得到“一大堆线程”。
我建议研究具有读取器/写入器语义的锁,而不是单个“残酷”排他锁。这应该使许多读者能够同时读取您的数据。只有当作者来更新数据时,才会使用排他锁。如果写入次数与读取次数相比较低,那么您将有很少的线程“备份”。
.Net ReaderWriterLockSlim
是一种可能性,但我衷心建议您查看 OneManyResourceLock
来自 Jeffrey Richter's Power Threading Library
关于c# - 锁会造成线程堆积吗?/这是避免锁定的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000043/