¿Es bueno probar una condición y luego bloquear luego volver a probar la condición [duplicar]
-
15-11-2019 - |
Pregunta
posible duplicado:
Bloqueo de doble comprobación en .NETEditar: Muchas ediciones para aclarar esta pregunta no se trata de Singleton
Me encuentro escribiendo un código como este:
if(resourceOnDiskNeedsUpdating) { lock(lockObject) { if(resourceOnDiskNeedsUpdating) // has a previous thread already done this? UpdateResourceOnDisk(); } } return LoadResourceFromDisk();
UpdateResource()
es una operación lenta. ¿Este patrón tiene sentido? ¿Hay mejores alternativas?
Solución
This called "double-checked locking".
You need a memory fence to make it correct.
Otros consejos
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