【问题标题】:Lock several pieces of code锁定几段代码
【发布时间】:2014-06-24 19:32:20
【问题描述】:

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

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

我如何做到这一点?

【问题讨论】:

  • 如果你真的必须这样做 - 只需锁定一些应用程序级别的对象。
  • 所以使用一个锁来控制对所有这些的访问。没有什么说一个锁不能在多个地方使用。
  • 看看 C# 中的 Lock 语句:msdn.microsoft.com/en-us/library/c5kehkcz.aspx
  • 我会非常谨慎地使用网络服务器上的阻塞锁...这是线程池压力、死锁和延迟的秘诀。它的异步等价物怎么样? blogs.msdn.com/b/pfxteam/archive/2012/02/12/10266988.aspx
  • @ispro ...因为你的代码在线程池中运行,线程池不是为阻塞场景设计的。 ThreadPool 作业应该是短暂的并且永远不会阻塞。

标签: c# asp.net .net multithreading


【解决方案1】:

好吧,您可以锁定所有代码块都可以访问的某个对象 - 理想情况下,它是一个 internal 对象(如果所有代码都在一个类中,则为 private),这样就不会外部代码可能会锁定它并阻止您的代码:

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
}

【讨论】:

  • 谢谢。我没有意识到我要找的东西已经在那里了。
  • 这是关于同一问题的一个很好的观点,也是与这个问题非常相似的答案:静态锁假定它正在监视静态资源。 stackoverflow.com/a/9405218/641530
猜你喜欢
  • 2017-10-23
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2013-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多