我有一个由多个线程共享的对象列表,在尝试Clear
时有时会生成IndexOutOfRangeException。在搜索解决方案时,我发现在访问List时我应该使用SyncLock。
但我的问题是lockObject
阻止SyncLock
中myList
的重要性
例如清除Synclock myList
myList.Clear
End SyncLock
时
我可以用
{{1}}
或lockObject应该与myList不同?
修改
我对sysnclock的看法是“为指定为lockObject的对象获取锁定”。如果我指定要清除的列表为lockObject,编译器是否应该在清除之前获取对列表的独占访问权?
答案 0 :(得分:4)
选择是任意的 - 引用可以完全独立于您在块中访问的数据,或者可以使用类似列表引用的内容。
就个人而言,我喜欢单独保留一个单独的 对象 - 如果它是一个私有只读变量,你知道该类外的代码都不会锁定在同一台显示器上。当然,如果您有许多不同的代码访问相同的共享数据,您可能需要更广泛地公开锁 - 但通常最好封装所有需要的操作来获取锁定class,然后将锁本身保密。
请注意,您不应只使用锁定进行清算 - 您需要使用无处不在的来访问该列表。