测试条件然后锁定然后重新测试条件是好的

可能重复:
在.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