Sobes.tech
Junior

Aká je funkcia kľúčového slova lock v jazyku C#?

sobes.tech AI

Odpoveď od AI

Клучната реч lock се користи за синхронизирање на пристапот до ресурси во повеќенитни апликации. Гарантира дека само еден нишка може да изврши кодот внатре во lock блокот во даден момент.

Принцип на работа:

  1. lock прифаќа како аргумент објект кој се користи како mutex (монитор).
  2. Пред извршувањето на кодот внатре во lock блокот, нишката се обидува да добие исклучителен блокад на зададениот објект.
  3. Ако блокадата е слободна, нишката ја добива и извршува кодот.
  4. Ако блокадата е зафатена од друга нишка, тековната нишка се блокира (преоѓа во состојба на чекање) додека блокадата не биде ослободена.
  5. При излегување од lock блокот (дури и при исклучок), блокадата автоматски се ослободува.

Ова се користи за заштита на заеднички ресурси, како што се полиња на класи, колекции или други објекти до кои можат да пристапуваат повеќе нишки истовремено, за да се избегнат состојби на трка (race conditions) и да се обезбеди интегритет на податоците.

Пример за употреба:

public class SharedResource
{
    private int _counter;
    private readonly object _lockObject = new object(); // Објект за синхронизација

    public void Increment()
    {
        lock (_lockObject) // Ексклузивен пристап до кодниот блок
        {
            _counter++; // Безбедна промена на заедничкиот ресурс
        }
    }

    public int GetCounter()
    {
        lock (_lockObject) // И при читање е ексклузивен пристап
        {
            return _counter;
        }
    }
}

Важни точки:

  • Објектот за заклучување треба да биде од тип референца и, по правило, приватно поле (readonly) за да се спречи надворешна интервенција.
  • Избегнувајте заклучување на типови како string, this или typeof(TypeName), бидејќи тие можат да бидат заеднички користени или достапни однадвор, што може да доведе до deadlocks или неправилна работа.
  • lock е синтаксички шеќер за користење на методите на класата Monitor.