МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра БІТ
З В І Т
до лабораторної роботи №4
з курсу: «ОПЕРАЦІЙНІ СИСТЕМИ»
на тему: «Багатопотокове програмування в сучасних ОС»
Мета: ознайомлення з поняттям багатопотоковості в сучасних операційних системах, отримання практичних навичок створення багато потокових застосувань в середовищі Visual Studio C#.
Короткі теоретичні відомості:
Як відомо [1] потоком (потік керування, нитка, thread) називають набір послідовно виконуваних команд процесора, які використовують загальний адресний простір процесу. Оскільки в системі може одночасно бути багато потоків, завданням ОС є організація перемикання процесора між ними і планування їхнього виконання. У багатопроцесорних системах код окремих потоків може виконуватися на окремих процесорах.
Багатопотоковими називають програми, які одночасно виконують різні чи однотипні завдання, використовуючи при тому декілька потоків.
Розглянемо яким чином можна оптимізувати програми, використовуючи багатопоточність.
Але не завжди можна розпаралелити задачу. Не завжди є в тому сенс. Наприклад, якщо у нас є один потік даних і його необхідно обробляти в певному порядку, і при цьому без результатів попередньої обробки даних наступну операцію виконувати не можна, то в такій програмі створення додаткових потоків нічого нам не дасть.
Потоки не повинні заважати один одному і повинні використовувати ефективно ресурси системи, в якій вони працюють.
Завдання: Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.
№ вар.
Кількість потоків
Завдання
1
3
Сума 2-х матриць (3х3).
Текст програми:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace lab4
{
class ThreadClass
{
int[,] c = new int[3, 3];
int[,] a = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } };
int[,] b = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } };
public void SetMas()
{
WriteMas(a);
WriteMas(b);
}
public void WriteMas(int[,] aa)
{
Console.WriteLine();
for (int i = 0; i <= 2; i++)
{
for (int j = 0; j <= 2; j++)
{
Console.Write("{0} ", aa[i, j]);
}
Console.WriteLine();
}
}
public void writestring1()
{
int i = 0;
for (int j = 0; j <= 2; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j];
}
}
public void writestring2()
{
int i = 1;
for (int j = 0; j <= 2; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j];
}
}
public void writestring3()
{
int i = 2;
for (int j = 0; j <= 2; j++)
{
c[i, j] = a[i, 0] * b[0, j] + a[i, 1] * b[1, j] + a[i, 2] * b[2, j];
}
}
public void WriteREZ()
{
WriteMas(c);
}
}
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass();
tc.SetMas();
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();
tc.WriteREZ();
Console.ReadLine();
}
}
}
Результати проведеної роботи:
/
/
Висновки: під час виконання даної лабораторної роботи я вивчив поняття багато потоковості в сучасних операційних системах, отримав практичні навички створення багато потокових застосувань в середовищі Visual Studio C#, створив програму що реалізує багато потоковість, наочно побачив виконання одночасно двох потоків данних.