首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SyncLock是如何在.Net中工作的

SyncLock是如何在.Net中工作的
EN

Stack Overflow用户
提问于 2011-04-22 06:19:00
回答 1查看 1.3K关注 0票数 0

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

但是我的问题是,如果lockObjectSyncLock块中的重要性是什么,例如,在清除myList时,我可以使用

代码语言:javascript
复制
Synclock myList
    myList.Clear
End SyncLock

或者lockObject应该与myList不同?

编辑:

我认为sysnclock是“为指定为lockObject的对象获取锁”。如果我将列表指定为lockObject,那么编译器不应该在清除列表之前获得对list的独占访问权吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-22 06:23:50

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

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

请注意,您不应该仅仅使用锁进行清除--您需要在访问列表的任何地方使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5752782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档