G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon
Download 1.46 Mb.
|
ParVychGafGal (1)
- Bu sahifa navigatsiya:
- Increment ham , Assign
- Increment and Assign ning ish zarralari uchun xavfsiz versiyalari
- GetBankFee() usuli
_val2.
C# lock iborasi aslida uchun sintaktik yorliqdir try/finally bloki yordamida Monitor.Enter va Monitor.Exit usullarini chaqirish . Bu yerda Oldingi misolning Go usulida aslida nima sodir bo'ladi : Monitor.Enter (_locker); harakat qilib ko'ring { agar (_val2 != 0) Console.WriteLine (_val1 / _val2); _val2 = 0; } nihoyat { Monitor.Exit (_locker); } Uchinchi tomon iplarining har biriga ko'rinadigan har qanday ob'ekt mumkin qattiq biriga bo'ysunuvchi sinxronizatsiya ob'ekti sifatida foydalanish qoida: u mos yozuvlar turi bo'lishi kerak. Sinxronizatsiya ob'ekti odatda shaxsiydir (chunki u mantiqni qamrab olishga yordam beradi qulflar) va odatda namuna yoki statik maydondir. Bunday tarzda blokirovka qilishning salbiy tomoni shundaki, siz buni qilmaysiz qulflash mantig'ini qamrab oling, shunda u qiyinlashadi ortiqcha blokirovkaning oldini olish. blokirovka qilish balki
bir xil
63
Machine Translated by Google ilova domeni chegaralari bo'ylab o'tish (xuddi shu jarayon). Shuningdek, olingan mahalliy o'zgaruvchilarni bloklashingiz mumkin lambda ifodalari yoki anonim usullar. Bloklash cheklanmaydi sinxronlash ob'ektiga kirish. Boshqacha aytganda x.ToString() u bloklanmaydi, chunki u boshqa ipni qulflash (x) deb nomlanadi; ikkala oqim qulflash uchun lock(x) ni chaqirish kerak . Asosiy qoida sifatida siz kirishni bloklashingiz kerak har qanday yoziladigan maydonga. Hatto eng oddiy holatda ham - bitta maydonda tayinlash operatsiyasi - sinxronizatsiyani hisobga olishingiz kerak. Keyingi sinfda Increment_ham_,_Assign'>Increment ham , Assign usuli ham mavjud emas ipdan xavfsiz: class ThreadUnsafe {static int _x; statik bekor O'sish () { _x ++; } statik bo'shliq Belgilash () {_x = 123; } } Mana Increment and Assign ning ish zarralari uchun xavfsiz versiyalari: class ThreadSafe { statik faqat o'qish ob'ekti _locker = yangi ob'ekt (); statik int _x; statik bekor O'sish () {qulflash (_locker) _x ++; } statik bekor tayinlash () {qulflash (_locker) _x = 123; } } Agar o'zgaruvchan guruh har doim ichida o'qiladi va yozilsa bitta qulf, siz o'zgaruvchilar o'qilmoqda, deb aytish mumkin va atomik tarzda yoziladi. Aytaylik, x va y maydonlari har doim o'qilishi mumkin va shkafning qulflash ob'ekti ichida tayinlangan : qulf (shkaf) {agar (x! = 0) y / = x; } Aytishimiz mumkinki, biz x va y o'zgaruvchilarga atomik ravishda kiramiz, chunki kod blokini harakatlar bilan ajratib bo'lmaydi yoki oldindan ajratib bo'lmaydi hisoblashdan oldin x yoki y o'zgarishi uchun boshqa ish zarracha natija.
Machine Translated by Google Agar qulf bilan ta'minlangan atomiklik buzilgan bo'lsa istisno blokirovka blokining ichiga tashlanadi . Masalan, ko'rib chiqing quyidagi misol: kasr _savingsBalance, _checkBalance; bekor o'tkazish (o'nlik miqdor) { qulf (_locker) { _savingsBalance += summa; _checkBalance -= summa + GetBankFee(); } } Agar istisno GetBankFee() usuli bilan tashlangan bo'lsa , bank yutqazgan bo'lardi pul bo'lardi. Bunday holda, GetBankFee-ga qo'ng'iroq qilish orqali muammodan qochishimiz mumkin avval. Keyinchalik murakkab holatlar uchun yechim mantiqni amalga oshirishdir Qo'lga olish yoki nihoyat blokirovka ichida "orqaga qaytarish" . Ko'rsatma atom hisoblanadi, agar u ajralmas tarzda bajarilsa asosiy protsessor. Muteks Yana bir ip sinxronizatsiyasini boshqarish vositasi Mutex klassi, shuningdek, System.Threading nom maydonida. Bu sinf mos keladigan OS ob'ekti ustidagi o'rash sinfidir Windows "mutex". Muteks bir-birini eksklyuziv qiladi sinxronlash ob'ekti. Bu oqim orqali qabul qilinishi mumkinligini anglatadi faqat ketma-ketlikda. Muteks umumiy bo'lgan holatlar uchun mo'ljallangan Resurs bir vaqtning o'zida faqat bitta ip tomonidan ishlatilishi mumkin. Syslog bir nechta bo'ylab taqsimlangan deb faraz qiling jarayonlar, lekin ulardan faqat bittasi ma'lumotlarni faylga yozishi mumkin istalgan vaqtda tizimga kiring. Berilgan jarayonlarni sinxronlashtirish uchun 65
Machine Translated by Google vaziyatlar mukammal mos keladi muteks. Sotib olish va Download 1.46 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling