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/

10-13 06:26