понимание блокировки помогает? - PullRequest
5 голосов
/ 01 октября 2009

Я создаю веб-сайт 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();
}

Ответы [ 2 ]

2 голосов
/ 01 октября 2009

Прочитайте документы для всех этих вещей:

1)

Application.Lock() and Application.Unlock()

Метод Lock блокирует других клиентов от изменения переменных, хранящихся в объект приложения цитата

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 голос
/ 01 октября 2009

Блокировка одного объекта не очень хорошо масштабируется. В качестве альтернативы я бы предложил рассмотреть шаблон проектирования Object Pool . Он гораздо больше способен расти, чтобы удовлетворить ваши растущие потребности пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...