G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon


Download 1.46 Mb.
bet37/85
Sana24.12.2022
Hajmi1.46 Mb.
#1062519
1   ...   33   34   35   36   37   38   39   40   ...   85
Bog'liq
ParVychGafGal (1)

_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.
64


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.



    1. 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:
1   ...   33   34   35   36   37   38   39   40   ...   85




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling