2-misol. Semaforlar yordamida tanqidiy qism masalasini yechish
semafor: mutex=1 => КС boʻsh, mutex=0 => КС band
sem mutex=1;
thread CS (i=0;i
while (true)
{
P(mutex); //kirish protokoli
Kritik seksiya;
V(mutex); // chiqish protokoli
Kiritik boʻlmagan seksiya;
}
}
7.4. Monitorlar
Semaforlar asosiy sinxronizatsiya mexanizmidir. Koʻp bosqichli dasturlash uchun til vositalarida, qoida tariqasida, ular bir nechta ilovalar bilan ifodalanadi. Biroq, semaforlar past darajadagi mexanizm boʻlib, odatda ushbu darajadagi obнektlarga xos boʻlgan bir qator kamchiliklarga ega. Misol uchun, siz tasodifan semafor murojaatini oʻtkazib yuborishingiz, barcha kritik boʻlimlarni himoya qilmasligingiz yoki umumiy tarmoqli global oʻzgaruvchilarda adashishingiz mumkin.
Semaforlardan foydalanganda ikkita muammo - oʻzaro istisno va shartli sinxronizatsiya - bir xil ibtidoiy juftliklar tomonidan dasturlashtirilgan, ammo bu turli xil tushunchalar va ularni amalga oshirishning turli mexanizmlariga ega boʻlishni xohlaymiz.
Monitorlar dasturiy ta’minot modullari boʻlib, ular semaforlar bilan bir xil samaradorlik bilan kod tuzilishini yaxshiroq ta’minlaydi. Monitor mavhum ob’ektning tasvirini inkapsullaydi, ob’ekt holatini saqlaydigan oʻzgaruvchilarni va unda operatsiyalarni amalga oshiradigan protseduralarni oʻz ichiga oladi. Tarmoq monitordagi oʻzgaruvchilarga faqat shu monitordagi protseduralarni chaqirish orqali kirishadi, shuning uchun oʻzaro istisno qilish bevosita ta’minlanadi, ikkita oqim bir monitorda bir vaqtning oʻzida ishlay olmaydi, chunki ikkita monitor protsedurasi bir vaqtda ishlamaydi. Parallel dasturda umumiy oʻzgaruvchilarga kirishni nazorat qilish uchun ma’lumotlarni inkapsulyatsiya qilish gʻoyasi E. Deykstra [16] tomonidan aytilgan va monitorlar ularga shunday nom bergan va ularning yordami bilan bir nechta klassik muammolarni hal qilishni taklif qilgan Xoara sharafiga nomlangan.
Aloqa va sinxronizatsiya uchun monitorlardan foydalanadigan parallel dastur ikkita turdagi modullarni oʻz ichiga oladi: faol oqimlar va passiv monitorlar.
Monitor umumiy resurs (resurs klassi) koʻrinishi va amalga oshirilishini guruhlash uchun ishlatiladi. Monitor quyidagi komponentlardan iborat:
interfeys - resurs tomonidan taqdim etilgan usullar;
ikkilik semafor (mutex) - oʻzaro istisno qilish uchun ishlatiladi. Har bir monitor protsedurasi ishni boshlashdan oldin mutexni ushlaydi va uni tugaguniga qadar ushlab turadi yoki shart oʻzgaruvchisida kutish funksiyasi chaqiriladi (monitorda sinxronlash uchun ishlatiladigan maxsus oʻzgaruvchi);
tana - resurs holatini aks ettiruvchi oʻzgaruvchilar.
Poyga sharoitlarini oldini olish uchun monitor mantigʻi mutexning har qanday chiqarilishidan oldin toʻgʻri boʻlishi kerak boʻlgan ba’zi invariantlarni qabul qiladi. Invariantning rostligini tekshirish, shuningdek, uning mavjudligi, qoida tariqasida, monitor loyihalovchisiga bogʻliq boʻlib qoladi.
Umuman olganda, monitor quyidagicha tavsiflanadi:
Do'stlaringiz bilan baham: |