2 Хід роботи
Ознайомитися з теоретичними відомостями.
За допомогою програми “Img2Arr” перетворити файл зображення згідно варіанту в матрицю.
Відкрити файл матриці “output.arr” за допомогою “Блокноту”, знищити останню пусту стрічку і табуляцію, переконатися, що кількість рядків матриці є кратною 2, 4 і 8.
Відкрити проект “ArrManip” у середовищі Visual Studio, завантаживши файл “ArrManip.sln”. Знайти у файлі “ArrManipDlg.cpp” управляючу функцію потоку (DWORD WINAPI ThreadProc(LPVOID lpParam)) і запрограмувати операцію над матрицею згідно варіанту. Наприклад, наступний фрагмент коду управляючої функції дозволяє обчислити суму елементів матриці:
res = 0; // Сума елементів фрагменту матриці, яку знаходить кожний потік
for(r=pData->startRow; r<pData->endRow; r++)
for(c=0; c<cols; c++)
res += pArr[r][c];
EnterCriticalSection(&pDlg->CriticalSection); // Початок критичної секції
*pArrRes += res; // Сума елементів всієї матриці
LeaveCriticalSection(&pDlg->CriticalSection); // Кінець критичної секції
Відкомпілювати проект (клавіша F7) і, запустити на виконання файл “ArrManip.exe”. Виконати операцію над матрицею використовуючи 1, 2, 4 і 8 потоків. Завантажити диспетчер задач і переглянути кількість потоків для процесу “ArrManip”.
Відключити вивід повідомлення з результатами обчислень для кожного потоку в управляючій функції за допомогою коментарів і перекомпілювати проект.
/*
CString msg, title;
msg.Format("Результат = %.2lf\nРядки = %u-%u", res, pData->startRow, pData->endRow);
title.Format("Потік #%u", pData->thrId);
::MessageBox(NULL, msg, title, MB_OK);
*/
Виконати операцію над матрицею використовуючи 1, 2, 4 і 8 потоків по три рази для кожної конфігурації та відобразити за допомогою діаграми Excel залежність середнього часу виконання від кількості потоків.
3 ЗМІСТ ЗВІТУ
Короткі теоретичні відомості по лабораторній роботі.
Зображення згідно варіанту.
Лістинг зміненої згідно варіанту управляючої функції потоку.
Копія екрану з результатами виконання програми для 1, 2, 4 і 8 потоків (з виводом повідомлень для кожного потоку).
Копія екрану з результатами виконання програми для 1, 2, 4 і 8 потоків (без виводу повідомлень для кожного потоку).
Діаграма залежності середнього часу виконання від кількості потоків.
Висновки.
4 Контрольні запитання
Процес, потік, програма
Структура процесу
Структура потоку
Первинний потік
Суть витісняючого планування на основі пріоритетів
Пріоритети процесів та потоків
Адресний простір процесів та потоків
Функції управління процесами
Функції управління потоками
Wait-функції
Види потоків в MFC
5 Використана література
Соломон, Руссинович. Внутреннее устройство MS Windows 2000. ISBN 5-7502-0136-8
Jeffrey Richter. Programming Applications for MicrosoftR Windows. ISBN 1-57231-996-8
Platform SDK / Windows Base Services / Executables / Processes and Threads
Platform SDK / Windows Base Services / Interprocess Communication / Synchronization
Periodicals 1996 / MSJ / December / First Aid For Thread-impaired: Using Multiple Threads with MFC
Periodicals 1996 / MSJ / March / Win32 Q&A
Periodicals 1997 / MSJ / July / C++ Q&A.
Periodicals 1997 / MSJ / January / Win32 Q&A.
MSDN
