编辑:事实证明,当我在浏览我发现了一个问题似乎是和我一样,我没有发现更早:Difference between lock(locker) and lock(variable_which_I_am_using)正在使用现有对象而不是创建特定的锁对象安全吗?
我在看一些代码,并试图围绕让我的头锁定的东西,我到了那里我想。
现在我在一些代码注意到我检讨了对象时,像这样创建:
private HashSet<Graphic> clustersInUse = new HashSet<Graphic>();
然后进一步在代码中使用像这样:
lock (clustersInUse)
{
// Do something with the Hashset
}
现在,有一个这样做的问题,而不是为锁创建一个特定的对象。就像这样:
private object clusterLocker = new object();
一下如果上面不知何故clustersInUse
被放到一个公共财产,那么,什么情况?
此外,如果有东西试图访问clustersInUse
而不锁定它,而它被锁定在另一个线程中会发生什么呢?
因此,基本上所有的问题或潜在的问题是,为什么总的来说最好只是创建一个特定的锁定对象?是否有任何情况下可以使用对象本身?也许是表现还是什么? – Firedragon
@Firedragon:它总是好的*不*使用对象本身。不要让生活复杂化。 –