我的代码是使用ArrayList存储集合元素的旧代码。我使用locking purpose before delete the object的m_objects.SyncRoot
lock(m_objects.SyncRoot)
{
m_objects.Remove(obj);
}现在的问题是,我现在想将m_objects的类型从ArrayList更改为List<T>,但我在上面的代码中遇到了问题。什么相当于List<T>的SyncRoot
?
发布于 2009-12-29 15:02:23
我想这可能就是你要找的
List<string> list = new List<string>();
lock (((IList)list).SyncRoot)
{
}可在C# Generics Recipes—Replacing the ArrayList with Its Generic Counterpart找到
发布于 2009-12-29 17:12:50
据我所知,SyncRoot只是一个用于锁定的对象。它只是为了让你省去创建要锁定的对象的麻烦。所以它必须是相同的
Object m_objectsLock = new Object();
lock(m_objectsLock)
{
m_objects.Remove(obj);
}您必须确保在使用SyncRoot的任何地方都使用m_objectsLock。
发布于 2009-12-29 17:07:06
据我所知,SyncRoot的概念已经过时了,而且用得也不多。大多数人转而使用lock(){}块。
public class SomeClass {
private readonly object listLock = new object();
private readonly List<string> yourList = new List<string>();
public void DeleteItem(string item) {
lock (listLock) {
yourList.Remove(item)
}
}
}https://stackoverflow.com/questions/1973272
复制相似问题