int y = 0, z = 0, x = 0;
par x = y + z; \\ y = 1; z = 2; endpar;
Oqimlar x, y, z oʻzgaruvchilari bilan almashadilar, parallel ravishda mustaqil ravishda bajariladi, ularning bajarilishi ketma-ketligi aniqlanmagan, bundan tashqari, deyarli har qanday vaqtda oqimni toʻxtatib qoʻyish va keyin davom ettirish mumkin. Faraz qilaylik, x = y + z ifodasi registrga y ni yuklash va keyin unga z qoʻshish orqali amalga oshirildi. Bunday holda, yuklash va qoʻshish oʻrtasida oqim uzilishi mumkin - va ikkinchi oqimning har qanday operatsiyalari toʻplami bajariladi. Bularning barchasi dasturning oldindan aytib boʻlmaydigan xatti-harakatlariga olib keladi, ya’ni x oʻzgaruvchisining qiymati 0, 1 yoki 3 boʻlishi mumkin.
Ushbu oddiy misol koʻp bosqichli dasturlashda birinchi oqim sinxronlash muammosini koʻrsatadi - oʻzaro istisno. Boʻlinmas tarzda bajarilishi kerak boʻlgan oqim kodining qismlarini kuzatib borish talab qilinadi. Tegishli algoritm odatda masalaning yirik modulli yechimi deb ataladi. Dasturlashda siz operatsiyalar ketma-ketligini bitta boʻlinmas sifatida bajarishga imkon beradigan mexanizmni amalga oshirishingiz kerak. Ushbu kod muammoning nozik yechimini belgilaydi.
Ikkinchi sinxronizatsiya muammosi - shartli kutish (yoki shartli sinxronizatsiya). Bunday holda, oqim ba’zi shartlar bajarilmagan paytgacha toʻxtatiladi. Oqim faol boʻlmaganligi sababli, shart faqat boshqa oqimning ishlashi natijasida bajarilishi mumkin. Bunday kod qismlari, shuningdek, yirik modulli yechim uchun kuzatilishi kerak va dasturlashda shartli kutishni amalga oshirishning qandaydir mexanizmidan foydalanish kerak.
Operator tomonidan umumiy sinxronlash belgisini aniqlaymiz:
< await (B) S;>
7.2. Oʻzaro istisno
Koʻp tarmoqli OT ning muhim boʻlimining vazifasi, qoida tariqasida, bir vaqtning oʻzida kompyuter resurslarini baham koʻradigan bir nechta oqimlar tomonidan amalga oshiriladi. Umumiylikni yoʻqotmasdan, har bir mavzuni ketma-ket dastur deb hisoblash mumkin.
Kritik boʻlim (CS) umumiy obyektga kirish huquqiga ega boʻlgan operatorlar ketma-ketligidir.
Shunday qilib, CS - bu bir nechta oqimlar tomonidan taqsimlanadigan manbaga murojaat qiluvchi ma’lum bir oqimning kod qismidir. Aytilishicha, agar u vaqtincha umumiy resursga eksklyuziv kirish huquqiga ega boʻlsa, oqim CSni qoʻlga kiritgan. Aytilishicha, agar u umumiy resurs bilan ishlashni toʻxtatganligi toʻgʻrisida biron-bir tarzda boshqa mavzularni xabardor qilsa, mavzu CSni chiqaradi.
Keling, shunday da’vo qilaylik
• n ta oqim kodning avval kritik, keyin esa kritik boʻlmagan qismini qayta-qayta bajaradi;
• CS kiradigan har qanday oqim uni bir nuqtada tark etadi;
• oqim faqat CS dan tashqarida tugaydi.
CS ning vazifasi oqimlarni CSda har doim faqat bitta oqim boʻladigan tarzda sinxronlashtirishdir. Birinchi marta tanqidiy boʻlimning vazifasi 1965-yilda E. Deykstra tomonidan tasvirlangan.
Dastur kodi nuqtai nazaridan, masalaning yechimi CS dan oldin doimo kirish protokoli, keyin esa chiqish protokoli bilan ifodalanadi. Shunday qilib, CS muammosining quyidagi yirik modulli yechimi qabul qilinadi:
Do'stlaringiz bilan baham: |