Цель: Научиться проектировать многопоточные приложения ( multithread applications ) и использовать основные средства взаимодействия в среде ОС.
В разделе необходимо составить программу, которая бы реализовывала параллельное выполнение проекта в среде ОС Windows. При этом необходимо воспользоваться механизмом вытесняющей многозадачности (Потоки/Процессы) и доступными средствами синхронизации и обмена данными.
Структура проекта задается двудольным графом (аналогичным сети Петри), в котором каждый узел представляет собой блок обработки, а переход – точку синхронизации и/или передачи данных. В зависимости от варианта, проект может иметь структуру одного из следующих типов:
Тип обработки для каждого узла зависит от номера варианта и берется из таблицы. Все блоки обработки имеют один вещественный аргумент и один вещественный результат. Аргумент формируется по формуле:
Arg = Σ Rez * Nblock * Nvar
где Σ Rez сумма результатов входящих блоков;
Nblock номер блока в конфигурации;
Nvar номер варианта.
Следует обратить внимание на то, что получение суммы результатов требует использования средств защиты доступа к разделяемым данным.
Результат обработки определяется типом обработчика:
“начало” — начинает выполнение проекта (результат всегда = 1);
“конец” — завершает выполнение проекта – выводит на экран свой аргумент, закрывает все потоки, освобождает ресурсы;
SS – SS(Arg) – вычисление суммы ряда Σ ABS(sin(i)) для i от 1 до модуля Arg;
SC – SC(Arg) – вычисление суммы ряда Σ ABS(cos(i)) для i от 1 до модуля Arg;
IL – IL(Arg) – вычисление определенного интеграла ABS(sin(x)) на интервале от -Arg до +Arg методом левых прямоугольников с разбиением на 100*Arg интервалов;
IR – IR(Arg) – вычисление определенного интеграла ABS(cos(x)) на интервале от -Arg до +Arg методом правых прямоугольников с разбиением на 100*Arg интервалов;
IT – IT(Arg) – вычисление определенного интеграла ABS(cos(x)*sin(x)) на интервале от -Arg до +Arg методом трапеций с разбиением на 100*Arg интервалов.
Программная реализация проекта должна удовлетворять следующим требованиям:
1) необходимо исключить возможность одновременного выполнения в системе более чем одной копий проекта (при повторном запуске должно выдаваться соответствующее сообщение и прекращаться выполнение второй копии программы);
2) для каждого узла обработки (независимо от разбиения проекта на потоки) необходимо выводить в LOG-файл сообщения:
‒ при входе в блок – сообщение о начале соответствующей обработки;
‒ при завершении обработки – сообщение о прекращении обработки и результат.
LOG-файл – один, общий для всего проекта (его необходимо представить в отчете).
1) в любом случае проект не должен выполняться более 20 секунд – если за это время вычисления не были закончены, то необходимо принудительно завершить все потоки и выдать соответствующее сообщение на экран и в LOG-файл;
2) для взаимодействия потоков в программе, в зависимости от варианта, необходимо использовать различные синхронизирующие объекты WIN32 API. В случае, если для каких либо целей указанный тип синхронизирующих объектов не подходит – необходимо объяснить почему они не подходят для этих целей и обосновать выбор другого типа объектов. Используются следующие типы синхронизирующих объектов из классификатора по заданным вариантам:
1. Критические секции (critical sections) и Потоки (threads) как синхронизирующие объекты;
2. Взаимоисключения (mutexes);
3. События (events);
4. Семафоры (semaphores).
Методические указания
1) Сначала необходимо ознакомиться с концепцией вытесняющей многозадачности и средствами взаимодействия потоков и процессов в среде ОС Windows.
2) Описать постановку задания для своего варианта (см. таб 4.1) с конкретизацией блоков обработок и структуры проекта.
3) Для своей конфигурации выбрать вариант разбиения проекта на потоки и механизмы синхронизации ивзаимодействия потоков. В зависимости от варианта необходимо использовать преимущественно рекомендованные средства взаимодействия ( в случае если предложенный объект синхронизации не пригоден для решения поставленной задачи, необходимо обосновать выбор другого средства взаимодействия).
4) Написать и отладить программу на языке программирования высокого уровня в среде WIN32 API (например можно использовать Microsoft Visual C++ и выше).
5) Составить отчет, при сдаче необходимо уметь проявлять свои знания вытесняющей многозадачности и средств взаимодействия потоков и процессов в среде ОС Windows.
Содержание отчета
1) Постановка задачи для своего варианта: структура проекта в виде графа (см.рис. 2.1), замечания по реализации алгоритмов, выбор средств взаимодействия потоков в проекте и обоснование этого выбора…
2) Листинги программ и спецификации основных процедур и функций. Содержание LOG-файла после выполнения программы.
Таблица 4.1 – Варианты заданий
Номер варианта | Номер конфигурации | Типы блоков обработки (Nblock) | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||
1. | 3 | IT | IR | IT | IR | SS | IL | SS | SS |
2. | 2 | IT | IR | IT | IR | IT | IL | SS | SS |
3. | 1 | SC | IR | IT | IR | IT | IL | IT | SS |
4. | 3 | IT | SS | IT | IR | SS | IT | SC | SS |
5. | 2 | SC | IT | IT | IR | SS | IL | IT | IT |
6. | 1 | SS | SS | IT | IR | IT | SS | SS | IT |
7. | 3 | IT | SC | IT | IR | SS | IT | SS | SS |
8. | 2 | SS | SC | IT | IR | SS | SS | IT | SS |
9. | 1 | SC | IR | IT | SC | IT | SC | IT | SS |
10. | 2 | SC | IR | IT | IR | IT | SC | SS | IT |
11. | 3 | SC | IR | IT | IR | IT | SC | SS | IT |
12. | 3 | SS | IR | IT | IR | SS | IL | SS | IT |
13. | 2 | SS | IR | IT | IR | IT | IL | SS | IT |
14. | 2 | SS | SC | SC | IT | SS | IL | SS | SS |
15. | 1 | IT | IR | IT | IR | IT | IT | SS | SS |
16. | 1 | SS | IR | IT | IR | SS | IL | IT | IT |
17. | 3 | SS | IR | IT | SC | SS | IL | SS | IR |
18. | 3 | IT | IT | IT | IT | IT | IT | SS | SS |
19. | 3 | SS | SS | IT | IR | SS | IL | SS | SS |
20. | 2 | SS | SS | IT | IR | SS | IR | SS | IT |
21. | 2 | IT | IT | SC | IT | IT | IL | IT | IT |
22. | 2 | SS | IT | SC | IR | IT | IR | IT | IL |
23. | 1 | SS | SS | SS | SC | IT | IR | SS | IR |
24. | 1 | IT | IT | SC | IR | IT | IL | SS | SS |
25. | 1 | SS | IR | IT | IR | SS | SC | SS | SC |
26. | 2 | SC | IR | IT | IR | SS | IL | SS | SS |
27. | 3 | IR | IR | SC | IT | SS | IL | SS | SS |
28. | 1 | IR | IR | IT | SS | SC | IL | SS | SS |
29. | 2 | IR | IR | IT | SS | SS | IL | SS | SS |
30. | 1 | IT | IT | SC | IT | IT | IL | IT | IT |
31. | 3 | IT | IR | IT | IR | SS | IL | SS | SS |
32. | 2 | IT | IR | IT | IR | IT | IL | SS | SS |
33. | 1 | SC | IR | IT | IR | IT | IL | IT | SS |
34. | 3 | IT | SS | IT | SC | IT | IT | SC | SS |
35. | 2 | SC | IT | IT | SC | IR | IT | IT | IT |
36. | 1 | SS | SS | IT | SS | SC | IT | SS | IT |
37. | 3 | IT | SC | IT | SC | IR | IT | SS | SS |
38. | 2 | SS | SC | IT | IT | IR | SS | IT | SS |
39. | 1 | SC | IR | IT | IT | IR | SS | IT | SS |
40. | 2 | IR | SS | IT | SS | SC | IL | IR | SS |
41. | 3 | SС | SS | IL | SS | SC | IT | SS | IT |
42. | 2 | IT | IT | SC | IR | IT | IL | IT | SS |
43. | 1 | IT | IR | IT | IR | SS | IL | IT | SS |
44. | 3 | SС | IR | IT | IR | SS | IT | SС | SC |
45. | 2 | SC | IR | IT | IR | IT | SC | SC | IT |
46. | 3 | SC | IR | IT | IR | IT | SC | SC | IT |
47. | 2 | SS | IR | IT | IR | SS | IL | SS | IT |
48. | 1 | SS | IR | IT | IR | IT | IL | SS | IT |
49. | 3 | IT | IR | IT | IR | SS | IL | IT | SS |
50. | 2 | IT | IR | IT | IR | IT | IL | IT | SS |
51. | 1 | SS | IR | IT | IR | SС | IL | IT | IT |
52. | 2 | SS | IR | IT | IT | SS | IL | SS | IR |
53. | 3 | IT | IL | IR | IT | IT | IT | SS | SS |
54. | 2 | SС | SS | IL | IL | SC | IT | SS | IR |
55. | 3 | IT | IR | IT | IR | SS | IL | SS | SS |
56. | 2 | IT | IR | IT | IR | IT | IL | SS | SS |
57. | 1 | SC | IR | IT | IR | IT | IL | IT | SS |
58. | 3 | IT | SS | IT | IR | SS | IT | SC | SS |
59. | 2 | SC | IT | IT | IR | SS | IL | IT | IT |
60. | 1 | SS | SS | IT | IR | IT | SS | SS | IT |
61. | 3 | IT | SC | IT | IR | SS | IT | SS | SS |
62. | 2 | SS | SC | IT | IR | SS | SS | IT | SS |
63. | 1 | SC | IR | IT | SC | IT | SC | IT | SS |
64. | 2 | SC | IR | IT | IR | IT | SC | SS | IT |
65. | 3 | SC | IR | IT | IR | IT | SC | SS | IT |
66. | 3 | SS | IR | IT | IR | SS | IL | SS | IT |
67. | 2 | SS | IR | IT | IR | IT | IL | SS | IT |
68. | 2 | SS | SC | SC | IT | SS | IL | SS | SS |
69. | 1 | IT | IR | IT | IR | IT | IT | SS | SS |
70. | 1 | SS | IR | IT | IR | SS | IL | IT | IT |
71. | 3 | SS | IR | IT | SC | SS | IL | SS | IR |
72. | 3 | IT | IT | IT | IT | IT | IT | SS | SS |
73. | 3 | SS | SS | IT | IR | SS | IL | SS | SS |
74. | 2 | SS | SS | IT | IR | SS | IR | SS | IT |
75. | 2 | IT | IT | SC | IT | IT | IL | IT | IT |
76. | 2 | SS | IT | SC | IR | IT | IR | IT | IL |
77. | 1 | SS | SS | SS | SC | IT | IR | SS | IR |
78. | 1 | IT | IT | SC | IR | IT | IL | SS | SS |
79. | 1 | SS | IR | IT | IR | SS | SC | SS | SC |
80. | 2 | IT | IT | SC | IR | IT | IL | IT | SS |
Тип синхронизирующих объектов выбирается из классификатора.
|
Рисунок 4.1 – Номер конфигурации
Раздел 5
Дата: 2019-02-25, просмотров: 309.