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-ի օգտագործման, և հարմար է հիմնականում պարզ դեպքերի համար մեկ գործընթացի ներսում։