C# 锁定几段代码

C# 锁定几段代码,c#,asp.net,.net,multithreading,C#,Asp.net,.net,Multithreading,我有一个asp.net网站,我想阻止并发访问某些代码。因为每个页面请求都会有自己的线程——这可能是个问题 如果这只是一段代码,我会锁定它。然而,实际上有几种相关的方法。如果一个线程进入其中一个,我想阻止其他线程进入任何一个 如何实现这一点?好吧,您可以在所有代码块都可以访问的某个对象上设置一个锁-理想情况下,它应该是内部对象(或者私有,如果所有代码都在一个类中),这样就没有外部代码可以锁定它并阻止您的代码: public class Global : System.Web.HttpApplica

我有一个asp.net网站,我想阻止并发访问某些代码。因为每个页面请求都会有自己的线程——这可能是个问题

如果这只是一段代码,我会锁定它。然而,实际上有几种相关的方法。如果一个线程进入其中一个,我想阻止其他线程进入任何一个


如何实现这一点?

好吧,您可以在所有代码块都可以访问的某个对象上设置一个锁-理想情况下,它应该是
内部
对象(或者
私有
,如果所有代码都在一个类中),这样就没有外部代码可以锁定它并阻止您的代码:

public class Global : System.Web.HttpApplication
{
    internal static readonly object LockObject = new Object();
    ...
}
。。。同时

lock(Global.LockObject)
{
   // code block 1 
}
。。。其他地方

lock(Global.LockObject)
{
   // code block 2
}

如果你真的必须这么做,只需锁定某个应用程序级对象。所以使用一个锁来控制对所有对象的访问。没有任何东西说锁不能在多个地方使用。看看C#中的lock语句:我会非常小心地在Web服务器上使用阻塞锁。。。这会造成线程池压力、死锁和延迟。它的异步等价物呢@ispro…因为您的代码正在线程池中运行,而线程池不是为阻塞场景而设计的。线程池作业应该是短期的,并且永远不会阻塞。谢谢。我没有意识到我正在寻找的东西已经存在了。在同一个问题上,这里有一个很好的观点和一个非常类似的答案:静态锁假设它正在监视一个静态资源。