簡體   English   中英

了解鎖定幫助?

[英]understanding Locking help?

我正在創建一個處理數千個請求的ASP.net網站,這一切都源於他們共享的一個主要對象來閱讀它。 我試圖繞過這些不同類型的鎖。

我對每個人都有一些常見問題。

  1. 每個鎖應用程序,會話,對象的范圍是什么
  2. 什么時候使用一個而不是另一個?
  3. 多個用戶可以一次運行鎖中的代碼嗎?
  4. 表現命中?

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();
}

閱讀所有這些內容的文檔:

1)

Application.Lock() and Application.Unlock()

Lock方法阻止其他客戶端修改存儲在Application對象引用中的變量

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. 
    }
}

將意味着一次只能有一個線程在該塊內。 意思是序列化的讀訪問。

鎖定單個對象不會很好地擴展。 作為替代方案,我建議考慮對象池設計模式。 它能夠越來越多地滿足您不斷增長的用戶需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM