Junior
C# tilida lock so'zining vazifasi nima?
sobes.tech AI
AIdan javob
Kalit so'z lock ko'p iptibli dasturlarda resurslarga kirishni sinxronlashtirish uchun ishlatiladi. Bu faqat bitta ipning lock blok ichidagi kodni bajarishini ta'minlaydi.
Ishlash prinsipi:
lockargument sifatida mutex (monitor) sifatida ishlatiladigan ob'ektni qabul qiladi.lockblok ichidagi kodni bajarishdan oldin, ip belgilangan ob'ekt ustida eksklyuziv blokirovka olishga harakat qiladi.- Agar blokirovka bo'sh bo'lsa, ip uni oladi va kodni bajaradi.
- Agar blokirovka boshqa ip tomonidan egallangan bo'lsa, joriy ip bloklanadi (kutish holatiga o'tadi) va blokirovka bo'shatilgunga qadar kutadi.
lockblokidan chiqishda (hatto xatolik bo'lsa ham), blokirovka avtomatik ravishda bo'shatiladi.
Bu umumiy resurslarni, masalan, sinflar maydonlari, kolleksiyalar yoki boshqa ob'ektlarni himoya qilish uchun ishlatiladi, ular bilan bir vaqtning o'zida bir nechta iplar murojaat qilishi mumkin, shuning uchun raqobat shartlarini (race conditions) oldini oladi va ma'lumotlarning yaxlitligini ta'minlaydi.
Foydalanish misoli:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Sinxronizatsiya uchun ob'ekt
public void Increment()
{
lock (_lockObject) // Kod blokiga eksklyuziv kirish
{
_counter++; // Umumiy resursni xavfsiz o'zgartirish
}
}
public int GetCounter()
{
lock (_lockObject) // O'qishda ham eksklyuziv kirish
{
return _counter;
}
}
}
Muhim nuqtalar:
- Blokirovka uchun ob'ekt referens turida bo'lishi va odatda, tashqi aralashuvni oldini olish uchun,
readonlybo'lishi tavsiya etiladi. string,thisyokitypeof(TypeName)kabi turlarni bloklamaslikka harakat qiling, chunki ular birgalikda ishlatilishi yoki tashqaridan kirish mumkin, bu esa deadlock'lar yoki noto'g'ri ishlashga olib kelishi mumkin.lockMonitorsinfining metodlaridan foydalanish uchun sintaksis shakaridir.