Possible Duplicate:
Double-checked locking in .net
编辑:很多编辑来澄清这个问题不是关于单例
我发现自己正在编写如下代码:
if(resourceOnDiskNeedsUpdating)
{
lock(lockObject)
{
if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
UpdateResourceOnDisk();
}
}
return LoadResourceFromDisk();
UpdateResource()
是一个缓慢的操作。这种模式有意义吗?
有更好的选择吗?
最佳答案
这称为“双重检查锁定”。
您需要一个内存围栏以使其正确。
见Wikipedia's article on double checked locking in .NET
关于c# - 测试条件然后锁定然后重新测试条件是否好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5036518/