Professional Documents
Culture Documents
Lab PRO3
Lab PRO3
10
ЛАБОРАТОРНА РОБОТА №3
Тема: засоби синхронізації потоків на основі повідомлень в C#.
Мета: виконати паралельні обчислення з використанням декількох
потоків та засобів синхронізації на основі повідомлень.
Завдання №1
Написати паралельну програму, яка обчислює значення виразу F за
варіантом. Кожна арифметична операція має бути виконана в окремому
потоці. Змінні ініціалізуються в тому ж потоці, в якому вони вперше
використовуються. Ініціалізувати змінні наступними значеннями: х1 = 1,
х2 = 2, х3 = 3, х4 = 4, х5 = 5, х6 = 6.
void task1() {
m1.lock();
x1 = 1;
Колєснік Д. М. КІ – 20, В.10
x2 = 2;
res1 = x1 + x2;
m1.unlock();
}
void task2() {
m2.lock();
x3 = 3;
x4 = 4;
x5 = 5;
x6 = 6;
res2 = x3 + x4 + x5 + x6;
m2.unlock();
}
void task3() {
m3.lock();
int f = res1 * res2;
cout << "F = " << f << endl;
m3.unlock();
}
int main() {
thread t1(task1);
thread t2(task2);
t1.join();
t2.join();
thread t3(task3);
t3.join();
return 0;
}
Експеримент:
Колєснік Д. М. КІ – 20, В.10
Завдання №2
Написати паралельну програму, яка обчислює матричний вираз за
варіантом. Всі матриці є квадратними, мають розмірність N і задаються
випадковими цілими числами у діапазоні [–10; 10]. Програма повинна
вирішувати такі завдання:
1) Кількість робочих потоків P, якими виконують паралельні обчислення, має
задаватися користувачем;
2) Потрібно побудувати графік залежності часу виконання програми від
розмірності матриць (N = 103, 104, 105 ...) при однопоточному режимі та
кількості потоків, яка відповідає кількості логічних ядер персонального
комп’ютера.
Висновок:
У ході виконання лабораторної роботи були виконані паралельні обчислення з
використанням декількох потоків та засобів синхронізації на основі
повідомлень.