可能的副本:
双重检查锁定.NET

编辑:很多编辑来澄清这个问题不是关于singleton

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

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

UpdateResource()是慢速操作。 这个模式是否有意义?
有更好的替代品吗?

有帮助吗?

解决方案

This called "double-checked locking".

You need a memory fence to make it correct.

See Wikipedia's article on double checked locking in .NET

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top