Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# LanguageЗаблокировать


Синтаксис

  • lock (obj) {}

замечания

Используя оператор lock вы можете управлять доступом разных потоков к коду внутри блока кода. Он обычно используется для предотвращения условий гонки, например, для чтения и удаления элементов из коллекции. Поскольку блокировка заставляет потоки ждать, пока другие потоки покинут блок кода, это может вызвать задержки, которые могут быть решены другими методами синхронизации.

MSDN

Ключевое слово lock указывает блок оператора как критический раздел, получая блокировку взаимного исключения для данного объекта, выполняя инструкцию, а затем освобождая блокировку.

Ключевое слово lock гарантирует, что один поток не войдет в критический раздел кода, а другой поток находится в критическом разделе. Если другой поток пытается ввести заблокированный код, он будет ждать, блокировать, пока объект не будет выпущен.

Лучшая практика заключается в определении частного объекта для блокировки или частной переменной статического объекта для защиты данных, общих для всех экземпляров.


В C # 5.0 и более поздних версиях оператор lock эквивалентен:

bool lockTaken = false;
try 
{
    System.Threading.Monitor.Enter(refObject, ref lockTaken);
    // code 
}
finally 
{
    if (lockTaken)
        System.Threading.Monitor.Exit(refObject);
}

Для C # 4.0 и ранее оператор lock эквивалентен:

System.Threading.Monitor.Enter(refObject);
try 
{
    // code
}
finally 
{
     System.Threading.Monitor.Exit(refObject);
}

Заблокировать Связанные примеры