ric*_*ard 6 .net icollection syncroot
我试图理解ICollection中syncroot的意义.为什么不直接锁定集合?
lock(myCollection)
{
//do stuff to myCollection
}
Run Code Online (Sandbox Code Playgroud)
VS
lock(myCollection.SyncRoot)
{
//do stuff to myCollection
}
Run Code Online (Sandbox Code Playgroud)
通常,如果线程安全是一个严重的问题,我会避免这些选项中的任何一个.
一个更好的选择通常是维护自己的私有变量,并在需要的所有方法中锁定它 - 包括访问集合的整个公共API.
真正的危险在于,通过锁定暴露或可能暴露于外部世界的类型,您可能会打开"外部世界"混乱同步的能力.如果使用多个锁,则可能导致死锁(如果外部锁定了您不期望的内容).
通过创建一个私有变量,并专门锁定它,你就"控制"了这种情况.这使得更清楚的是发生了什么.此外,它可以简化多个对象之间的同步,尤其是在您维护代码之后,因为锁定非常清晰.
归档时间: |
|
查看次数: |
5060 次 |
最近记录: |