DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Операційні системи

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра БІТ / Звіт до лабораторної роботи №5 З КУРСУ «ОПЕРАЦІЙНІ СИСТЕМИ» Варіант 14 Мета роботи: Ознайомлення з методами вирішення проблеми синхронізації потоків в C#, отримання практичних навичок виправлення помилок синхронізації в багатопотокових застосуваннях, створених на платформі .NET . Завдання Для вивчення основних можливостей службового застосування "Редактор Реєстру" виконати наступне. Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту. Використовуючи засоби VisualStudio(C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі). № вар. Кількість потоків Завдання  10 3 Сума 2-х матриць (3x3).   Код програми using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace lab4 { class ThreadClass { SemaphoreSlim sem = new SemaphoreSlim(7); int[,] c = new int[4, 4]; int[,] a = { { 1, 1, 1, 1}, { 2, 2, 2, 2}, { 3, 3, 3, 3}, { 4, 4, 4, 4}}; int[,] b = { { 1, 1, 1, 1}, { 2, 2, 2, 2}, { 3, 3, 3, 3}, { 4, 4, 4, 4}}; public  double SUM; public void SetMas() { WriteMas(a); WriteMas(b); } public void WriteMas(int[,] aa) { Console.WriteLine(); for (int i = 0; i <= 3; i++) { for (int j = 0; j <= 3; j++) { Console.Write("{0} ", aa[i, j]); } Console.WriteLine(); } } public void writestring1() { sem.Wait(); for (int i = 0; i <= 0; i++) { for (int j = 0; j <= 3; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writestring2() { sem.Wait(); for (int i = 1; i <= 1; i++) { for (int j = 0; j <= 1; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writestring3() { sem.Wait(); for (int i = 1; i <= 1; i++) { for (int j = 2; j <= 3; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writestring4() { sem.Wait(); for (int i = 2; i <= 2; i++) { for (int j = 0; j <= 1; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writesthring5() { sem.Wait(); for (int i = 2; i <= 2; i++) { for (int j = 2; j <= 3; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writestring6() { sem.Wait(); for (int i = 3; i <= 3; i++) { for (int j = 0; j <= 1; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void writestring7() { sem.Wait(); for (int i = 3; i <= 3; i++) { for (int j = 2; j <= 3; j++) { c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j] + a[i, 3] * b[3, j]; } } sem.Release(); } public void WriteREZ() { WriteMas(c); } public void Sum()            { Thread.Sleep(100); sem.Wait();                sem.Wait(); sem.Wait(); sem.Wait(); sem.Wait(); sem.Wait(); sem.Wait();               WriteREZ();                SUM = 0;                for (int i = 0; i < c.GetLength(0); i++)             {               for (int j = 0; j < c.GetLength(1); j++)                 {                        SUM += c[i,j];                 }                }                    Console.WriteLine("Сума всiх елементiв масиву = " + SUM);                 sem.Release();                 sem.Release(); sem.Release(); sem.Release(); sem.Release(); sem.Release(); sem.Release();                                Console.ReadKey(true);            }     } class Program { static void Main(string[] args) { ThreadClass tc = new ThreadClass(); tc.SetMas(); /* tc.writestring1(); tc.writestring2(); tc.writestring3(); tc.writestring4();*/ Thread firstthread = new Thread(new ThreadStart(tc.writestring1)); Thread secondthread = new Thread(new ThreadStart(tc.writestring2)); Thread thirdthread = new Thread(new ThreadStart(tc.writestring3)); Thread fourthread = new Thread(new ThreadStart(tc.writestring4)); Thread fifththread = new Thread(new ThreadStart(tc.writesthring5)); Thread sixththread = new Thread(new ThreadStart(tc.writestring6)); Thread sevenththread = new Thread(new ThreadStart(tc.writestring7)); Thread eigththread = new Thread(new ThreadStart(tc.Sum)); firstthread.Start(); secondthread.Start(); thirdthread.Start(); fourthread.Start(); fifththread.Start(); sixththread.Start(); sevenththread.Start(); eigththread.Start(); Console.ReadLine(); } } } Результати виконання / Висновок Під час лабораторної роботи №5 я ознайомився з методами вирішення проблеми синхронізації потоків в C#, отримав практичні навички виправлення помилок синхронізації в багатопотокових програмах, створених на платформі .NET .
Антиботан аватар за замовчуванням

12.06.2015 19:43

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!