关于Double Lock的疑问
麻烦请教大家一个问题: 看到张老三的关于一个用double lock来产生线程安全的单例对象的方法突然有一个疑问,
第一种方法:如果把这句话(事实上是一个随便的初始化过程)
Dim source As IConfigurationSource = System.Configuration.ConfigurationSettings.GetConfig("activerecord")
ActiveRecordStarter.Initialize([Assembly].Load("ASPNET.StarterKit.Portal.Model"), source)
ActiveRecordStarter.Initialize([Assembly].Load("ASPNET.StarterKit.Portal.Model"), source)
放在Double Lock的话而这个Double Lock放在一个普通的类文件(可能是基类)的话
private static readonly object lockObj = new object();
if ( _factory == null ) {
lock ( lockObj ) {
if ( _factory == null ) {
// 放在这里;
}
} // end lock
}
if ( _factory == null ) {
lock ( lockObj ) {
if ( _factory == null ) {
// 放在这里;
}
} // end lock
}
第二种方法:放在全局文件里面
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' 在应用程序启动时激发
Dim source As IConfigurationSource = System.Configuration.ConfigurationSettings.GetConfig("activerecord")
ActiveRecordStarter.Initialize([Assembly].Load("ASPNET.StarterKit.Portal.Model"), source)
End Sub
' 在应用程序启动时激发
Dim source As IConfigurationSource = System.Configuration.ConfigurationSettings.GetConfig("activerecord")
ActiveRecordStarter.Initialize([Assembly].Load("ASPNET.StarterKit.Portal.Model"), source)
End Sub
这两种方法能产生一样的效果吗(也就是说只初始化一次)?还是产生不同的效果?