测试一个条件然后锁定然后重新测试条件是否合适
可能的重复:
.net 中的双重检查锁定
编辑: 很多编辑以澄清这个问题与单例无关
我发现自己编写如下代码:
if(resourceOnDiskNeedsUpdating)
{
lock(lockObject)
{
if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
UpdateResourceOnDisk();
}
}
return LoadResourceFromDisk();
UpdateResource()
是一个缓慢的操作。 这种模式有意义吗?
有更好的选择吗?
Possible Duplicate:
Double-checked locking in .net
EDIT: lots of edits to clarify this question is not about singleton
I find myself writing code like this:
if(resourceOnDiskNeedsUpdating)
{
lock(lockObject)
{
if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
UpdateResourceOnDisk();
}
}
return LoadResourceFromDisk();
UpdateResource()
is a slow operation.
Does this pattern make sense?
Are there better alternatives?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这称为“双重检查锁定”。
你需要一个记忆栅栏来使其正确。
请参阅维基百科有关 .NET 中双重检查锁定的文章
This called "double-checked locking".
You need a memory fence to make it correct.
See Wikipedia's article on double checked locking in .NET
我使用的另一种选择是仅使用“易失性”关键字。
http://msdn.microsoft.com/en -us/library/x13ttww7%28v=vs.71%29.aspx
An alternative I use would be to just use the 'volatile' keyword.
http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx