Sobes.tech
Junior — Middle

Какво точно се предава или използва в механизма за заключване (lock) в многопоточната програмиране?

sobes.tech AI

Отговор от AI

В механизма за блокиране (lock) в многопоточната програмиране се използва обект или примитив за синхронизация, който осигурява изключителен достъп до споделен ресурс. Когато нишка придобие блокировката, други нишки, които се опитват да я придобият, ще чакат, докато тя не бъде освободена.

Тоест, под "lock" се предава или използва:

  • Статусът на блокировката (заета/свободна).
  • Механизмът за изчакване (например, опашка от нишки, чакащи освобождаване).

В C# ключовата дума lock работи с обект, който служи като маркер за блокировка. Пример:

private readonly object _lockObj = new object();

void CriticalSection()
{
    lock(_lockObj)
    {
        // Код, който трябва да се изпълнява само от една нишка едновременно
    }
}

Тук, в lock, се предава препратка към обекта _lockObj, който се използва за управление на достъпа. Вътрешно, CLR използва този обект, за да контролира състоянието на блокировката.