Sobes.tech
Middle

Ի՞նչ են lock-երը C#-ում։

sobes.tech AI

Պատասխան AI-ից

C#-ում lock օգտագործվում է բացառիկ մուտք ապահովելու համար կոդի բլոկին։ Այն երաշխավորում է, որ միայն մեկ հոսք կարող է միաժամանակ կատարել այդ բլոկը, կանխելով մրցակցության պայմանները (race conditions) ընդհանուր ռեսուրսների հետ աշխատելիս։

private static readonly object _lockObject = new object(); // Սինխրոնիզացիայի օբյեկտ

public void AccessSharedResource()
{
    lock (_lockObject) // Օբյեկտի փակել
    {
        // Կրիտիկական հատված՝ կոդ, որը պահանջում է բացառիկ մուտք
        // Աշխատանք ընդհանուր ռեսուրսի հետ (օր. փոփոխել փոփոխական)
    } // Փակումը ավտոմատ կերպով բացվում է բլոկից դուրս գալուց հետո
}

Ալտերնատիվներ և կապված հասկացություններ՝

  • Monitor: Ավելի մանրակրկիտ վերահսկում է սինխրոնիզացիան, ներառյալ Wait, Pulse, PulseAll մեթոդները:
  • Mutex: Օգտագործվում է գործընթացների միջև և նույն գործընթացի մեջ հոսքերի միջև սինխրոնիզացիայի համար:
  • Semaphore/SemaphoreSlim: Սահմանափակում է միաժամանակ ռեսուրսին մուտք գործող հոսքերի քանակը:
  • ReaderWriterLockSlim: Միաժամանակ ընթերցող հոսքերը թույլ է տալիս, բայց միայն մեկին կարող է գրել:

Ստուգման մեխանիզմի ընտրությունը կախված է կոնկրետ սինխրոնիզացիայի առաջադրանքից։ lock-ը կարճացված տարբերակ է Monitor.Enter և Monitor.Exit-ի օգտագործման, և հարմար է հիմնականում պարզ դեպքերի համար մեկ գործընթացի ներսում։