- •Міністерство освіти і науки, молоді та спорту україни національний університет «львівська політехніка» методичні вказівки
- •Теоретичні відомості
- •Таким чином метод writestring() працює в окремому потоці.
- •Послідовність виконання роботи
- •Контрольні запитання
- •1. Современные операционные системы: [пер. С англ.] Эндрю с. Таненбаум Издательский дом "Питер", 2011 - 1115 стор.
Таким чином метод writestring() працює в окремому потоці.
В методі main() створюється екземпляр класу ThreadClass. Далі ми створюємо об'єкт типу Thread і передаємо йому як параметр делегат ThreadStart що містить посилання на метод writestring(). Роботу з делегатам можна нагадати розглянувши наступні джерела [2,3]. Ну і останньою строчкою у нас запускається потік за допомогою методу Start().
У наведеному прикладі ми не бачимо наочно роботи потоку, але змінивши приклад наступним чином а саме, додавши ще один потік, який буде виводити рядок " Тестовий потік №2":
class ThreadClass
{
public void writestring()
{
while (true)
{
Console.WriteLine("Тестовий потік №1");
Thread.Sleep(1000);
}
}
public void writestring2()
{
while (true)
{
Console.WriteLine("Тестовий потік №2");
Thread.Sleep(1000);
}
}
}
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass();
Thread firstthread = new Thread(new ThreadStart(tc.writestring));
Thread secondthread = new Thread(new ThreadStart(tc.writestring2));
firstthread.Start();
secondthread.Start();
}
}
Рис.2.
В даному лістінгу додали ще один метод writestring2(). Необхідно звернути увагу на рядок "Thread.Sleep (1000)", який з'явився в обох методах. Метод Sleep() "призупиняє" потік для наочносі на час вказаний в якості параметра (в мілісекундах). У прикладі ми призупиняємо потік на 1 секунду. У методі main() теж відбулися деякі зміни пов'язані з запуском нового потоку. Запустивши програму, ви побачите, що на екрані з'являється то рядок " Тестовий потік №1", то " Тестовий потік №2", причому в досить довільному порядку. Довільність пов'язана з тим, що на вашому комп'ютері запущена не тільки ваша програма, а багато інших, тому процесору доводиться "відволікатися" і на виконання інших завдань. Приорітет виконання потоку можна змінити за допомогою наступної стрічки:
Thread.CurrentThread.Priority = ThreadPriority.Highest;
Зі зміною приоритету треба бути уважним, так як необережне його підвищення може «підвісити систему». Додаткову інформацію по програмуванню багатопотокових задач в C# можна знайти в [2-4].
Послідовність виконання роботи
Вивчити теоретичний матеріал, що стосується методів та засобів багатопотоковості в C#.
Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.
Використовуючи засоби Visual Studio (C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі).
Проведіть тестування створеної програми.
Для 10-х варіантів довільних даних проведіть обчислення.
Результати обчислення наведіть у висновку .
В звіті по лабораторній роботі відобразити теоретичний огляд, зміст завдання, блок-схему алгоритму, текст програми та у вигляді таблиці результати роботи для 10-ти варіантів даних.
Табл.1 Варіанти завдань
№ вар. |
Кількість потоків |
Завдання |
1 |
2 |
Сума 2-х матриць (9х9). |
2 |
3 |
Сума 2-х матриць (3х3). |
3 |
3 |
Добуток 2-х матриць (3х3). |
4 |
4 |
Добуток 2-х матриць (3х3). |
5 |
3 |
Добуток 2-х матриць (4х4). |
6 |
2 |
Добуток 2-х матриць (4х4). |
7 |
5 |
Добуток 2-х матриць (5х5). |
8 |
7 |
Сума 2-х матриць (7х7). |
9 |
4 |
Сума 2-х матриць (7х7). |
10 |
3 |
Сума 2-х матриць (3х3). |
11 |
2 |
Сума 2-х матриць (3х3). |
12 |
5 |
Добуток 2-х матриць (7х7). |
13 |
4 |
Добуток 2-х матриць (3х3). |
14 |
7 |
Добуток 2-х матриць (4х4). |
15 |
5 |
Добуток 2-х матриць (4х4). |
16 |
7 |
Добуток 2-х матриць (5х5). |
17 |
4 |
Сума 2-х матриць (7х7). |
18 |
5 |
Сума 2-х матриць (7х7). |
19 |
8 |
Сума 2-х матриць (3х3). |
20 |
4 |
Добуток 2-х матриць (3х3). |
21 |
7 |
Добуток 2-х матриць (9х9). |
