了解锁定帮助?

时间:2009-10-01 03:38:02

标签: c# asp.net locking

我正在创建一个处理数千个请求的ASP.net网站,这一切都源于他们共享的一个主要对象来阅读它。我试图绕过这些不同类型的锁。

我对每个问题都有一些常见的问题。

  1. 每个锁定应用程序,会话,对象
  2. 的范围是什么
  3. 什么时候使用一个而不是另一个?
  4. 多个用户可以一次运行锁中的代码吗?
  5. 表演命中?
  6. 1

    public class MyClass
       {
          lock
          {
            // DO COOL CODE STUFF.
          }
       }
    

    2

    public class MyClass
    {
      Application.Lock  
      // DO COOL CODE STUFF.
      Application.Unlock 
     } 
    

    3

    public static object lockObject = new object();
    public class MyClass
    {    
        lock(lockObject) 
        {
          // DO COOL CODE STUFF. 
        }
    }
    

    4

    private static readonly ReaderWriterLockSlim slimLock =  new ReaderWriterLockSlim();
    public class MyClass
    {
        slimLock.EnterWriteLock();
        // DO COOL CODE STUFF HERE.     
        slimLock.ExitWriteLock();
    }
    

2 个答案:

答案 0 :(得分:2)

阅读所有这些内容的文档:

1)

Application.Lock() and Application.Unlock()
  

Lock方法阻止其他客户端   从修改存储的变量   应用程序对象citation

2)你不能这样做:

public class MyClass
{
   lock
   {
     // DO COOL CODE STUFF.
   }
}

3)如果您可以同时阅读多个客户端,则应使用ReaderWriterLockSlim,但写访问必须具有独占访问权。

4)此代码:

public static object lockObject = new object();
public class MyClass
{    
    lock(lockObject) 
    {
      // DO COOL CODE STUFF. 
    }
}

意味着一次只能有一个线程在该块内。意思是序列化读访问。

答案 1 :(得分:1)

锁定单个对象不会很好地扩展。作为替代方案,我建议考虑Object Pool设计模式。它能够越来越多地满足您日益增长的用户需求。