Asp.net 应用程序启动
ASP.NET用户标识在允许写入数据库的Application.Start中不可用。网站正在共享主机上运行,因此我无法根据需要配置权限。 因此,我在global.asax中实现了以下内容。我不确定它是否完全线程安全。 我想删除委托以消除锁检查以优化性能 我想知道如果Firstreq!=null可能会失败。 谢谢Asp.net 应用程序启动,asp.net,Asp.net,ASP.NET用户标识在允许写入数据库的Application.Start中不可用。网站正在共享主机上运行,因此我无法根据需要配置权限。 因此,我在global.asax中实现了以下内容。我不确定它是否完全线程安全。 我想删除委托以消除锁检查以优化性能 我想知道如果Firstreq!=null可能会失败。 谢谢 您的代码不是线程安全的,双锁模式虽然在逻辑上您可能认为它是安全的,但实际上并不像您所实现的那样安全。您需要在Firstreq Declaration上添加关键字 这显示了正确实现的双重检
您的代码不是线程安全的,双锁模式虽然在逻辑上您可能认为它是安全的,但实际上并不像您所实现的那样安全。您需要在Firstreq Declaration上添加关键字 这显示了正确实现的双重检查锁
delegate void FirstRequest();
static volatile FirstRequest TheFirstReq;
static object ObjLock = new Object();
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AppStartDateTime = DateTime.Now;
TheFirstReq = FirstReq;
}
void FirstReq()
{
lock (ObjLock)
{
if (TheFirstReq == null)
return;
TheFirstReq = null;
// Log Application start.
}
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (TheFirstReq != null)
TheFirstReq();
}