Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_OS_No. 4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
99.84 Кб
Скачать

Таким чином метод 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].

Послідовність виконання роботи

  1. Вивчити теоретичний матеріал, що стосується методів та засобів багатопотоковості в C#.

  2. Побудувати алгоритм програми, яка вирішує завдання оптимізації виконання певних операцій над матрицями з використанням багатопотоковості. Завдання наведені в таблиці відповідно до варіанту.

  3. Використовуючи засоби Visual Studio (C#, C++, …) створіть програму, що вирішує дане завдання (в консольному чи WinForms режимі).

  4. Проведіть тестування створеної програми.

  5. Для 10-х варіантів довільних даних проведіть обчислення.

  6. Результати обчислення наведіть у висновку .

  7. В звіті по лабораторній роботі відобразити теоретичний огляд, зміст завдання, блок-схему алгоритму, текст програми та у вигляді таблиці результати роботи для 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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]