Sobes.tech
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:

  1. lock argument sifatida mutex (monitor) sifatida ishlatiladigan ob'ektni qabul qiladi.
  2. lock blok ichidagi kodni bajarishdan oldin, ip belgilangan ob'ekt ustida eksklyuziv blokirovka olishga harakat qiladi.
  3. Agar blokirovka bo'sh bo'lsa, ip uni oladi va kodni bajaradi.
  4. Agar blokirovka boshqa ip tomonidan egallangan bo'lsa, joriy ip bloklanadi (kutish holatiga o'tadi) va blokirovka bo'shatilgunga qadar kutadi.
  5. lock blokidan 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, readonly bo'lishi tavsiya etiladi.
  • string, this yoki typeof(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.
  • lock Monitor sinfining metodlaridan foydalanish uchun sintaksis shakaridir.