我正在尝试理解ICollection中的同步点。为什么不直接锁定收藏呢?
lock(myCollection)
{
//do stuff to myCollection
}vs
lock(myCollection.SyncRoot)
{
//do stuff to myCollection
}发布于 2011-06-30 02:05:47
通常,如果线程安全是一个严重的问题,我会避免这些选项中的任何一个。
更好的选择通常是维护您自己的私有变量,并在需要它的所有方法中锁定它-包括访问集合的整个公共API。
真正的危险是,通过锁定一个公开的或可能公开给外部世界的类型,您可能会打开“外部世界”扰乱同步的能力。如果使用了多个锁,这可能会导致死锁(如果外部锁在您不期望的东西上)。
通过创建一个私有变量,并以独占方式锁定它,您可以“控制”这种情况。这使得正在发生的事情变得更加清晰。此外,它简化了多个对象之间的同步,特别是在以后维护代码时,因为锁非常清晰。
https://stackoverflow.com/questions/6525118
复制相似问题