首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SyncLock有气味吗?

SyncLock有气味吗?
EN

Stack Overflow用户
提问于 2012-09-21 16:30:38
回答 1查看 820关注 0票数 2

我在一个类中有下面的代码,它管理自动刷新某些对象,这也允许您手动刷新。我想让它安全。

代码语言:javascript
复制
Public Function ForceRefresh() As Foo
  DoRefresh()
  ResetTimer()
  Return Me.CurrentFoo
End Function

Private Sub DoRefresh()
  Me._currentFoo = Me._retriever.GetTheFoo()
End Sub

我很想Synclock这两种方法:

  • ForceRefresh:所以我们不会让多个使用者线程同时强制刷新和重置计时器
  • DoRefresh:所以,如果我们已经在尝试检索一个,我们就不会尝试GetTheFoo()。我使用的是System.Threading.Timer,它可能会调用任何ThreadPool线程,所以简单地使用标记可能不合适(但可能仍然需要吗?)

..。就像这样:

代码语言:javascript
复制
Private _syncRoot As New Object

Public Function ForceRefresh() As Foo
  Synclock _syncRoot
    'Snip ...
  End Synclock
End Function

Private Sub DoRefresh()
  Synclock _syncRoot
    'Snip ...
  End Synclock
End Sub

但当我打电话给Synclock的时候,我想在_syncRoot上打两次电话.现在,如果Synclock是可重入的,那么嵌套就不是问题了。MSDN文档页面似乎暗示了这种情况,但并没有明确说明。

注意:我会自己试一试,但是我在StackOverflow上没有看到任何关于这个的东西,我认为这是一个很有用的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-21 17:18:05

SyncLock语句使用遮罩下的Monitor.Enter()。MSDN库说:

同一个线程在不阻塞的情况下多次调用Enter是合法的。

这意味着它是重入者。顺便说一句容易检查。

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

https://stackoverflow.com/questions/12534467

复制
相关文章

相似问题

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