|
|
1
207
支持并发的.NET 4.0类命名为
|
|
2
63
尝试内部同步几乎肯定是不够的,因为它的抽象级别太低。假设你做了
那么,当您从多个线程调用这段假定是线程安全的代码时,会发生什么呢?它会一直正常工作吗?
简单的答案是否定的。在某一点上
外部 字典,例如。
但是现在,由于您必须编写外部锁定代码,您将内部和外部同步混淆,这总是导致代码不清晰和死锁等问题。因此,最终您可能会更好地选择:
(我倾向于自己去) |
|
|
3
43
正如Peter所说,您可以在类中封装所有线程安全性。您需要小心处理您公开或添加的任何事件,确保在任何锁之外调用它们。
编辑: |
|
|
4
6
您不应该通过属性发布私有锁对象。锁定对象应单独存在,以用作集合点。 如果使用标准锁时性能不佳,则Wintellect的 Power Threading 锁的集合可能非常有用。 |
|
|
5
5
就我个人而言,我发现实现线程安全类的最佳方法是通过不变性。它确实减少了线程安全性可能遇到的问题数量。退房 Eric Lippert's Blog 更多细节。 |
|
|
6
3
您不需要在使用者对象中锁定SyncRoot属性。您在字典的方法中拥有的锁就足够了。 最终发生的情况是,您的词典被锁定的时间比需要的时间更长。 在您的情况下会发生以下情况: 假设线程A获得SyncRoot上的锁 之前 您可以简单地允许任何使用者调用Add方法,因为SharedDictionary类Add方法中的lock语句将具有相同的效果。此时,您有冗余锁定。如果必须对dictionary对象执行两个需要保证连续发生的操作,则只能在dictionary方法之一之外锁定SyncRoot。 |
|
|
7
0
实例
|
|
|
8
-6
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |