Asp classic 经典的ASP:Can的;申请书;全局对象导致死锁?

Asp classic 经典的ASP:Can的;申请书;全局对象导致死锁?,asp-classic,deadlock,Asp Classic,Deadlock,在经典ASP中,有一个名为的全局对象“应用程序”,可由所有会话同时访问 由于“应用程序”对象是共享资源,它会导致死锁吗? 编辑:如果没有,为什么它有锁定和解锁方法 不,它从不阻塞。死锁是指两个或多个相互竞争的动作等待另一个动作完成,因此两个动作都没有完成。死锁不同于正常阻塞。由于页面是在不同的线程中处理的,如果您想阻止另一个请求修改该共享资源,可以使用Lock,如果要再次允许修改,可以使用Unlock方法。问题是,如果不使用这些方法,另一个请求可能会在应用程序状态下更改项的值,而您依赖的是旧值。

经典ASP中,有一个名为的全局对象“应用程序”,可由所有会话同时访问

由于“应用程序”对象是共享资源,它会导致死锁吗?


编辑:如果没有,为什么它有锁定解锁方法

不,它从不阻塞。

死锁是指两个或多个相互竞争的动作等待另一个动作完成,因此两个动作都没有完成。

死锁不同于正常阻塞。由于页面是在不同的线程中处理的,如果您想阻止另一个请求修改该共享资源,可以使用Lock,如果要再次允许修改,可以使用Unlock方法。问题是,如果不使用这些方法,另一个请求可能会在应用程序状态下更改项的值,而您依赖的是旧值。或者两个请求可以尝试同时修改它,这可能会导致问题。锁定方法使一个请求等待,直到另一个请求解锁应用程序;在那之后,它可以继续


死锁是线程a锁定资源1并等待资源2变为可用的情况。同时,已锁定资源2的线程B需要访问资源1(由线程A锁定)才能继续工作,并能够在以后释放资源。在这种情况下,所有线程都不能继续(必须终止其中一个线程才能继续)。这是一个僵局。如果正确使用,锁本身不会导致死锁。但如果使用不当,可能会导致死锁(与另一个需要锁定的共享资源一起使用时,死锁不会得到处理)。

锁定ASP
应用程序对象不太可能导致死锁持续时间超过服务器脚本超时设置

经典的ASP
应用程序
对象具有锁定和解锁功能,用于同步对应用程序对象的更改。您可能有多个请求试图对同一个值进行更改—如果不锁定,则进行更改然后解锁更改可能会丢失

简单的例子是某种计数器。假设您的代码执行以下操作:

<%
Application("Count") = Application("Count") + 1
%>
如果
应用程序
被锁定,而另一个请求线程尝试访问该应用程序,则该线程将阻塞,直到解除锁定或超过脚本超时

如果忘记解锁锁,则在处理页面或超过脚本超时后,锁将自动释放

有关详细信息

<%
Application.Lock
Application("Count") = Application("Count") + 1
Application.Unlock
%>