|
1
46
没有什么理由害怕死锁,它们很容易被发现。你的程序停止运行,毫无意义。你真正应该害怕的是线程竞速,当你不锁定的时候你会遇到这种错误。 非常 很难诊断。
|
|
|
2
11
如果您的列表数据大部分是只读的,那么您可以允许多个线程使用 ReaderWriterLockSlim 我还想提到,如果您使用的是.NET4.0 BlockingCollection 类自动实现此功能。 我要是早知道就好了 几个月前的事了! |
|
|
3
5
您还可以考虑使用不可变的数据结构—将列表视为值类型。
e、 为了证明这个想法,我突然提出了以下几点。我很抱歉,这绝对不是参考代码,它开始变得有点长。
|
|
|
4
4
通常,出于性能原因,集合不是线程安全的,哈希表除外。您必须使用IsSynchronized和SyncRoot来确保线程安全。看到了吗 here 和 here
编辑:如果您使用的是.net 4.0,则可以使用 concurrent collections |
|
|
5
3
螺纹2:
在这里,线程1和线程2有可能导致死锁,因为线程1可能正在保持
如果你必须用多把锁,一定要用同样的顺序。如果你只拿了一把锁,就不会造成死锁。。。除非您在等待用户输入时持有一个锁,但从技术上讲,这不是一个死锁,并导致另一点:永远不要持有一个锁超过您绝对必须的时间。 |