经典ASP:"Application"全局对象是否会导致死锁?

Dan*_*ira 2 deadlock asp-classic

传统的ASP中,有一个名为"Application"的全局对象,所有会话都可以同时访问它.

由于"Application"对象是共享资源,它是否会导致死锁?

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

Meh*_*ari 5

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

死锁是其中一种情况线程A 锁定 资源1等待资源2变得可用.同时,已锁定资源2的线程B需要访问资源1(由线程A锁定)以继续工作并且之后能够释放资源.在这种情况下,没有任何线程可以继续(其中一个必须终止以允许继续).这是一个僵局 .如果正确使用,Application.Lock本身不会导致死锁.但如果它没有正确使用,它可能会导致死锁(当与另一个需要锁定和死锁的共享资源结合使用时).