测试条件然后锁定然后重新测试条件是好的
可能重复:
在.net中双重检查锁定
编辑:许多编辑澄清这个问题不是关于单身人士
我发现自己编写的代码如下:
if(resourceOnDiskNeedsUpdating) { lock(lockObject) { if(resourceOnDiskNeedsUpdating) // has a previous thread already done this? UpdateResourceOnDisk(); } } return LoadResourceFromDisk();
UpdateResource()
是一个缓慢的操作。 这种模式有意义吗?
还有更好的选择吗?
这称为“双重检查锁定”。
您需要一个内存栅栏才能使其正确。
请参阅Wikipedia关于.NET中双重检查锁定的文章
我使用的另一种方法是使用’volatile’关键字。 http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx