我的代码是旧代码,它使用ArrayList
来存储集合元素。我使用m_objects.SyncRoot
locking purpose before delete the object:
lock(m_objects.SyncRoot)
{
m_objects.Remove(obj);
}
现在的问题是,我现在想要将m_objects
的类型从ArrayList
更改为List<T>
,我遇到上述代码的问题。等同于List<T>
的{{1}}
?
答案 0 :(得分:5)
我认为这可能就是你要找的东西
List<string> list = new List<string>();
lock (((IList)list).SyncRoot)
{
}
找到C# Generics Recipes—Replacing the ArrayList with Its Generic Counterpart
答案 1 :(得分:1)
据我所知,SyncRoot只是一个用来锁定的对象。只是为了避免创建一个锁定对象。所以它必须是相同的
Object m_objectsLock = new Object();
lock(m_objectsLock)
{
m_objects.Remove(obj);
}
您必须确保在使用SyncRoot的任何地方使用m_objectsLock。
答案 2 :(得分:0)
据我所知,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)
}
}
}