DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт до лабораторної роботи №5 з курсу «Операційні системи»

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

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

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

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

Про що ця робота

У звіті до лабораторної роботи розглянуто методи вирішення проблеми синхронізації потоків у C#. Наведено практичну реалізацію багатопотокового виконання операцій над матрицями на платформі .NET.

У роботі розглядаються

  • Операційні системи
  • Багатопотоковість
  • Синхронізація потоків
  • Мова програмування C#
  • Платформа .NET
  • Обробка матриць

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Код програми
  4. Результати виконання/висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Мельник В. А.

Ключові поняття

потіксинхронізаціяSemaphoreSlimматрицяC#.NETбагатопотоковістьThreadопераційні системи

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра БІТ / Звіт до лабораторної роботи №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 .
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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