哈希表具有同步根属性,但通用字典没有。如果我有这样做的代码:lock(hashtable.Syncroot){....}如果我要删除哈希表并更改为通用词典,我该如何复制它? 最佳答案 如果您严格要求兼容性,那么Bryan是正确的。这是在字典之上维护当前语义的最佳方式。虽然扩展了它。SyncRoot属性没有直接添加到通用字典的原因是它是一种危险的同步方式。它只比非常危险且容易出现死锁的“lock(this)”好一点点。这里有几个链接说明了为什么这是不好的。http://blogs.msdn.com/bclteam/archive/20
每个人都使用很多列表。我需要遍历这个列表,所以我使用已知的SyncRoot模式。最近我注意到this发布应该避免使用SyncRoot以支持“嵌入式”线程安全(每个方法将锁定一个私有(private)对象而不使用SyncRoot属性公开它)。我能理解,部分同意。问题是List类不实现SyncRoot属性,即使实现了ICollection接口(interface),它公开了SyncRoot属性。我说这会破坏代码Listlist=newList()list.SyncRoot;给我以下编译器错误:errorCS0117:'System.Collections.Generic.List'does
我正在阅读一本介绍SyncRoot模式的C#书籍。它显示voiddoThis(){lock(this){...}}voiddoThat(){lock(this){...}}并与SyncRoot模式进行比较:objectsyncRoot=newobject();voiddoThis(){lock(syncRoot){...}}voiddoThat(){lock(syncRoot){...}}但是,我真的不明白这里的区别;似乎在这两种情况下,这两种方法一次只能由一个线程访问。书上描述...因为实例的对象也可以用于从外部进行同步访问,而你无法控制这个类本身的形式,你可以使用SyncRoot模