1

可能重复:
.net 中的双重检查锁定

编辑:澄清这个问题的大量编辑与单身无关

我发现自己在写这样的代码:

    if(resourceOnDiskNeedsUpdating)
    {
        lock(lockObject)
        {
            if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
                UpdateResourceOnDisk();
        }
    }
    return LoadResourceFromDisk();

UpdateResource()是一个缓慢的操作。这种模式有意义吗?
有更好的选择吗?

4

2 回答 2

4

这称为“双重检查锁定”。

你需要一个记忆栅栏来使它正确。

请参阅Wikipedia 关于 .NET 中的双重检查锁定的文章

于 2011-02-18T00:47:25.240 回答
2

我使用的另一种方法是只使用“volatile”关键字。 http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

于 2011-02-18T00:52:32.867 回答