测试一个条件是好的,然后锁定然后重新测试条件[复制]
-
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
不隶属于 StackOverflow