Sobes.tech
Junior

Каква е целта на ключовата дума lock в C#?

sobes.tech AI

Отговор от AI

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

Основните й цели:

  • Блокиране на достъпа: Гарантира, че само един поток може да изпълнява кода вътре в блока lock в даден момент.
  • Защита на споделените ресурси: Предотвратява състезателни условия при едновременен достъп на няколко потока до данни или ресурси като полета на клас, колекции и др.
  • Синхронизиране на потоците: Използва се за организиране на реда на изпълнение на операции в многонишкови сценарии.

Пример за използване:

private static readonly object _lockObject = new object(); // Обект за заключване

public void UpdateCounter()
{
    // Начало на критичната секция
    lock (_lockObject)
    {
        // Кодът вътре в този блок може да се изпълнява само от един поток едновременно
        counter++;
    }
    // Край на критичната секция
}

Важно е да се използва специализиран обект (_lockObject в примера) за заключване, а не this или typeof(TypeName), за да се избегнат потенциални проблеми с взаимно блокиране. Препоръчва се използването на обекти от тип object или System.Threading.ReaderWriterLockSlim за по-сложни сценарии.