Bosh sahifa Wiki Lock

Lock

Lock — umumiy resursga bir vaqtdagi kirishni muvofiqlashtiradigan sinxronizatsiya mexanizmidir. Oqim yoki jarayon qulfni olgach, belgilangan qoidaga ko‘ra boshqa bajaruvchilar kutadi yoki muvaffaqiyatsiz qaytadi. Lockning maqsadi kodni shunchaki ketma-ketlashtirish emas, ma’lumot invariantini raqobatli bajarilishdan himoya qilishdir.

Qulf turlari

Mutex odatda bitta egaga ega va uni olgan oqim bo‘shatadi. Spinlock kutuvchi oqimni uxlatmay, qisqa vaqt aylanib tekshiradi; juda qisqa yadro kritik bo‘limida foydali, uzoq kutishda CPUni isrof qiladi. Read-write lock parallel o‘quvchilarni qabul qilib, yozuvchiga eksklyuziv kirish beradi.

Semaphore ma’lum sonli ruxsatni boshqaradi va qat’iy egaga ega bo‘lmasligi mumkin, shu sababli u mutex bilan bir xil emas. File lock jarayonlar orasida fayl yoki oraliqni himoya qiladi. Distributed lock tarmoqdagi bir nechta tugun uchun egalikni kelishtiradi, ammo lease, soat, bo‘linish va fencing masalasini hal qilishi kerak.

Hayot sikli

Qulf olish bloklovchi, try_lock yoki timeoutli bo‘lishi mumkin. Muvaffaqiyatdan keyin resursga kiriladi va barcha chiqish yo‘lida unlock bajariladi. Tilning RAII yoki context manager mexanizmi istisnoda ham bo‘shatishni kafolatlaydi. Qulf ostidagi obyektga havola tashqariga chiqib ketsa, unlockdan keyin himoyasiz foydalanish mumkin.

Reentrant lock ayni oqimga qulfni bir necha marta olishga ruxsat beradi va mos marta bo‘shatishni talab qiladi. U ayrim rekursiv dizaynni yengillashtiradi, lekin keraksiz qayta kirish mas’uliyatlar aralashganini yashirishi mumkin. Non-reentrant mutex bunday xatoni erta ko‘rsatadi.

Deadlock va starvation

Bir nechta qulf turli tartibda olinsa circular wait paydo bo‘ladi. Global lock ordering, birgalikda atomar olish yoki dizaynni soddalashtirish deadlockni oldini oladi. Timeout faqat abadiy kutishni to‘xtatadi; yarim bajarilgan amalni rollback qilish baribir kerak.

Unfair lock throughputni yaxshilashi mumkin, ammo ayrim kutuvchini uzoq ushlab qoladi. Priority inversionda past ustuvor oqim qulfni ushlab, yuqori ustuvorni kutdiradi, o‘rta ustuvor esa past oqimga CPU bermaydi. Priority inheritance real vaqt tizimida buni yumshatadi.

Unumdorlik

Contention bo‘lmagan lock ham atomar ko‘rsatma va memory barrier xarajatiga ega. Contentionda yadro uyg‘otishi, context switch va kesh liniyasi almashinuvi qo‘shiladi. Metrikalarda kutish va ushlab turish vaqti, navbat uzunligi hamda qulf chaqirilgan joy kuzatiladi.

Kritik bo‘limni qisqartirish, sharding, immutable snapshot yoki message passing contentionni kamaytiradi. Lock-free tuzilma faqat to‘g‘riligi isbotlangan va benchmark foyda ko‘rsatgan holatda tanlanadi. Qulfni olib tashlash data race evaziga tezlik bermasligi kerak.

Diagnostika

Thread dump qaysi oqim qaysi lockni ushlab, nimani kutayotganini ko‘rsatadi. Bitta snapshot vaqtinchalik holat bo‘lishi mumkin; takroriy namunalar doimiy bottleneckni ajratadi. Deadlock detector siklni avtomatik topishi mumkin, ammo external service yoki conditionni kutish har doim lock graphda ko‘rinmaydi. Qulf nomi yoki manzilini biznes resursiga bog‘lash tahlilni osonlashtiradi. Productionda har lock amalini batafsil loglashning o‘zi contention yaratishi mumkin, shuning uchun sampling va agregat histogram ishlatiladi. Tuzatishdan keyin throughput bilan birga tail latency va to‘g‘rilik stress testi qayta o‘lchanadi.

Qulf diagnostikasi production ma’lumotini oshkor qilmasdan resurs turini ko‘rsatishi kerak. Dynamic lock nomiga foydalanuvchi matnini to‘liq qo‘shish metric cardinalityni keskin oshiradi. Barqaror kategoriya va alohida trace identifikatori ishlatiladi. Profiler natijasida lock manzili kod joyi va obyekt turi bilan bog‘lanadi.

Bog‘liq tushunchalar

Mutex, Spinlock, Semaphore, Deadlock, Critical section, Lock contention