我有一个由多个线程共享的对象列表,它有时在尝试IndexOutOfRangeException时生成Clear。在搜索解决方案时,我发现在访问列表时应该使用SyncLock。
但是我的问题是,如果lockObject在SyncLock块中的重要性是什么,例如,在清除myList时,我可以使用
Synclock myList
myList.Clear
End SyncLock或者lockObject应该与myList不同?
编辑:
我认为sysnclock是“为指定为lockObject的对象获取锁”。如果我将列表指定为lockObject,那么编译器不应该在清除列表之前获得对list的独占访问权吗?
发布于 2011-04-22 06:23:50
选择是任意的--引用可以完全独立于您在块内访问的数据,或者您可以使用类似列表引用的内容。
就我个人而言,我喜欢只为锁定而保留一个单独的对象--如果它是一个私有只读变量,您知道类之外的任何代码都不会锁定在同一个监视器上。当然,如果有许多不同的代码访问相同的共享数据,则可能需要更广泛地公开锁--但通常最好将需要在一个类中获取锁的所有操作封装起来,然后将锁本身保持为私有。
请注意,您不应该仅仅使用锁进行清除--您需要在访问列表的任何地方使用它。
https://stackoverflow.com/questions/5752782
复制相似问题