SyncLock如何在.Net中运行

时间:2011-04-22 06:19:01

标签: .net vb.net multithreading synclock

我有一个由多个线程共享的对象列表,在尝试Clear时有时会生成IndexOutOfRangeException。在搜索解决方案时,我发现在访问List时我应该使用SyncLock。

但我的问题是lockObject阻止SyncLockmyList的重要性 例如清除Synclock myList myList.Clear End SyncLock 时 我可以用

吗?
{{1}}

或lockObject应该与myList不同?

修改

我对sysnclock的看法是“为指定为lockObject的对象获取锁定”。如果我指定要清除的列表为lockObject,编译器是否应该在清除之前获取对列表的独占访问权?

1 个答案:

答案 0 :(得分:4)

选择是任意的 - 引用可以完全独立于您在块中访问的数据,或者可以使用类似列表引用的内容。

就个人而言,我喜欢单独保留一个单独的 对象 - 如果它是一个私有只读变量,你知道该类外的代码都不会锁定在同一台显示器上。当然,如果您有许多不同的代码访问相同的共享数据,您可能需要更广泛地公开锁 - 但通常最好封装所有需要的操作来获取锁定class,然后将锁本身保密。

请注意,您不应只使用锁定进行清算 - 您需要使用无处不在的来访问该列表。