Это хорошо проверить условие, а затем заблокировать, затем повторно проверить условие [дубликат]
-
15-11-2019 - |
Вопрос
<Сильный> Возможный дубликат:
Дважды проверяется блокировка в .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.
Другие советы
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