Это хорошо проверить условие, а затем заблокировать, затем повторно проверить условие [дубликат]

StackOverflow https://stackoverflow.com/questions/5036518

Вопрос

<Сильный> Возможный дубликат:
Дважды проверяется блокировка в .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