每个人都会用很多清单。我需要迭代这个列表,所以我使用了已知的SyncRoot模式。
最近,我在这文章中注意到,为了“嵌入式”线程安全起见,应该避免使用SyncRoot (每个方法都会锁定私有对象,而不会使用SyncRoot属性公开它)。我能理解这一点,而且在这一点上我也有部分同意。
问题是列表类不实现SyncRoot属性,即使实现了公开SyncRoot属性的ICollection接口。我说这是因为密码
List<int> list = new List<int>()
list.SyncRoot;请给我以下编译器错误:
错误CS0117:“System.Collections.Generic.List”不包含“SyncRoot”的定义
...If --这是真的,在迭代列表时,我如何同步一个类型为List的公共属性?
发布于 2010-11-01 07:58:20
它实际上是显式实现的。
object ICollection.SyncRoot
{
get
{
if (this._syncRoot == null)
{
Interlocked.CompareExchange(ref this._syncRoot, new object(), null);
}
return this._syncRoot;
}
}这意味着您必须转换为ICollection才能使用它。
https://stackoverflow.com/questions/4067354
复制相似问题