【发布时间】:2010-04-29 21:10:05
【问题描述】:
我在几个项目中使用了这种模式,(这段代码来自CodeCampServer),我理解它的作用,但我对这种模式的解释非常感兴趣。具体来说:
- 为什么
_dependenciesRegistered的双重检查。 - 为什么要使用
lock (Lock){}。
谢谢。
public class DependencyRegistrarModule : IHttpModule
{
private static bool _dependenciesRegistered;
private static readonly object Lock = new object();
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
public void Dispose() { }
private static void context_BeginRequest(object sender, EventArgs e)
{
EnsureDependenciesRegistered();
}
private static void EnsureDependenciesRegistered()
{
if (!_dependenciesRegistered)
{
lock (Lock)
{
if (!_dependenciesRegistered)
{
new DependencyRegistrar().ConfigureOnStartup();
_dependenciesRegistered = true;
}
}
}
}
}
【问题讨论】:
标签: c# multithreading locking