Оқиғалар негізінде синхронизациялауды пайдалану
Автор: ALIRIZUANOV • Февраль 28, 2023 • Лабораторная работа • 607 Слов (3 Страниц) • 139 Просмотры
Лабораториялық жұмыс 5. Оқиғалар негізінде синхронизациялауды пайдалану.
Лабораториялық жұмыстың мақсаты: Студенттерде көпағындық программаларда оқиғалар негізінде синхронизациялауды пайдалану дағдыларын қалыптастыру.
Лабораториялық жұмысты орындау нәтижесінде студенттер келесі қабілеттерге ие болады:
- Синхронизациялауға байланысты оқиға түрлерін ажырату;
- Оқиға туындауына байланысты ағын.
Тапсырма: Төменде берілген мысалмен танысып, нұсқа бойынша берілген тапсырмаларды орындауда оқиға негізінде синхронизациялауды пайдаланыңыз.
Оқиға негізінде ағындарды синхронизациялау мысалы
Мысал 1. Бастапқы күйге қолданушы тарапынан орнатылатын оқиға негізінде ағындарды синхронизациялау.
using System;
using System.Threading;
// Келесі ағын оның конструкторына оқиға берілгенін хабарлайды.
class MyThread {
public Thread Thrd;
ManualResetEvent mre;
public MyThread(string name, ManualResetEvent evt) {
Thrd = new Thread(this.Run);
Thrd.Name = name;
mre = evt;
Thrd.Start();
}
// Ағынға кіру нүктесі.
void Run() {
Console.WriteLine(Thrd.Name + " ағынында");
for(int i=0; i<5; i++) {
Console.WriteLine(Thrd.Name);
Thread.Sleep(500);
}
Console.WriteLine(Thrd.Name + " аяқталды!");
// Оқиға жөнінде хабарлау.
mre.Set();
}
}
class ManualEventDemo {
static void Main() {
ManualResetEvent evtObj = new ManualResetEvent(false);
MyThread mt1 = new MyThread("1-ші оқиғалық ағын", evtObj);
Console.WriteLine("Негізгі ағын оқиғаны күтуде.");
// Оқиға туралы хабарламаны күту.
evtObj.WaitOne();
Console.WriteLine("Негізгі ағын бірінші ағыннан оқиға туралы хабарлама алды.");
// Оқиғалық объектіні бастапқы күйге орнату.
evtObj.Reset();
mt1 = new MyThread("2-ші оқиғалық ағын", evtObj);
// Оқиға туралы хабарламаны күту.
evtObj.WaitOne();
Console.WriteLine("Негізгі ағын екінші ағыннан оқиға туралы хабарлама алды.");
}
}
Тапсырмалар
1-нұсқа
Матрицаны векторға көбейтуді орындаңыз. Матрицаның әрбір жолы жеке ағында өңделуі тиіс.
2-нұсқа
Берілген аралыққа жататын барлық жай сандарды табыңыз. Тапсырманы орындау үшін классикалық Евклид алгоритмін қолданыңыз. Берілген аралықты кіші аралықтарға бөліп, әрбір ішкі аралықты жеке ағында өңдеңіз.
3-нұсқа
Аю мен аралардың өзара байланысу процесін бейнелейтін программа құрыңыз. N араның әрқайсысы бал жинауға қатысады: бір рет бал жинауға шыққанда барлығы бірдей мөлшерде (М1) бал жинайды және оған кездейсоқ уақыт жұмсайды. Аю X уақыт ішінде M2 мөлшерінде балмен қоректенеді және келесі X уақытта азықсыз тіршілік ете алады. Әрбір араның жұмысын жеке ағында жүзеге асырыңыз.
4-нұсқа
Шарлардың қозғалысын бейнелейтін программа құрыңыз. N шар берілген. Олардың тік және көлденең координаталары кездейсоқ шамаларға өзгереді. Егер шар берілген аймақ шекарасынан төмен түссе, жоғалып кетеді. Әрбір шардың координатасының өзгеруін жеке ағында жүзеге асырыңыз.
5-нұсқа
Топтардың қарсыласуын бейнелейтін программа құрыңыз. Ойыншылардың N тобы бар. Әрбір топтың ойыншылар саны кездейсоқ шамаға артады және қарсылас топтың кездейсоқ ойыншылар санын жояды. Әрбір топтар жұбының өзара қарсыластығы жеке ағында жүзеге асырылуы тиіс.
...