МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
/
Звіт до лабораторної роботи №4
З КУРСУ «ОПЕРАЦІЙНІ СИСТЕМИ»
Варіант 10
Мета роботи ознайомлення з поняттям багатопотоковості в сучасних операційних системах, отримання практичних навичок створення багато потокових застосувань в середовищі Visual Studio C#.
Завдання
Для вивчення основних можливостей службового застосування "Редактор Реєстру" виконати наступне.
Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.
Використовуючи засоби Visual Studio (C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі).
№ вар.
Кількість потоків
Завдання
10
3
Сума 2-х матриць (3х3).
Код програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace lab4
{
class ThreadClass
{
int[,] a, b, c;
int i, j, k, x1, y1, x2, y2, kil;
public ThreadClass()
{
k=3;
a = b = c = new int[k, k];
a[0, 0] = 1;
a[0, 1] = 2;
a[0, 2] = 3;
a[1, 0] = 1;
a[1, 1] = 2;
a[1, 2] = 3;
a[2, 0] = 1;
a[2, 1] = 2;
a[2, 2] = 3;
b[0, 0] = 6;
b[0, 1] = 5;
b[0, 2] = 4;
b[1, 0] = 6;
b[1, 1] = 5;
b[1, 2] = 4;
b[2, 0] = 6;
b[2, 1] = 5;
b[2, 2] = 4;
kil = 0;
x1 = y1 = 0;
x2 = y2 = k - 1;
}
public void writestring1()
{
while (kil<k*k)
{
kil++;
c[x1, y1] = a[x1, y1] + b[x1, y1];
Console.WriteLine("1. c[{0},{1}]={2}", x1, y1, c[x1, y1]);
y1++;
if (y1 == k)
{
y1 = 0;
x1++;
}
Thread.Sleep(1000);
}
}
public void writestring2()
{
while (kil < k * k)
{
kil++;
c[x2, y2] = a[x2, y2] + b[x2, y2];
Console.WriteLine("2. c[{0},{1}]={2}", x2, y2, c[x2, y2]);
y2--;
if (y2 == -1)
{
y2 = k-1;
x2--;
}
Thread.Sleep(1000);
}
}
public void writestring3()
{
Console.Write("3. ");
if (kil % 2 == 0) writestring1();
else writestring2();
}
}
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass();
Thread firstthread = new Thread(new ThreadStart(tc.writestring1));
Thread secondthread = new Thread(new ThreadStart(tc.writestring2));
Thread thirdthread = new Thread(new ThreadStart(tc.writestring3));
firstthread.Start();
secondthread.Start();
thirdthread.Start();
}
}
}
Результати виконання
1. c[0,0]=12
2. c[2,2]=8
3. 1. c[0,1]=10
1. c[0,2]=8
2. c[2,1]=10
1. c[1,0]=12
1. c[1,1]=10
2. c[2,0]=12
1. c[1,2]=8
Висновок
Під час лабораторної роботи №4 я ознайомився з поняттям багатопотоковості в сучасних операційних системах, отримав практичні навичи створення багатопотокових застосувань в середовищі Visual Studio C#.