Министерство образования Российской Федерации
Комсомольский-на-Амуре государственный технический университет
Факультет компьютерных технологий
кафедра «Математического обеспечения и применения ЭВМ»
Тихомиров В.А.
СИНХРОНИЗАЦИЯ ПОТОКОВ В
ОПЕРАЦИОННОЙ СИСТЕМЕ
WINDOWS
лабораторная работа по курсу
“Операционные системы (защищенный режим работы процессора)”
специальность 2204
2001 г.
Цель лабораторной работы: Изучить теоретические вопросы управления синхронизацией программных потоков в ОС Windows и освоить приемы практической реализации этого управления с использованием системных функций.
Задание на лабораторную работу:
- внимательно изучить ниже прилагаемый теоретический материал;
- набрать и проверить работоспособность программных модулей, представленных на листингах 1-4. Тексты программ вместе с результатами их тестирования вставить в отчет;
- выполнить индивидуальное задание в соответствии с выданным преподавателем вариантом:
№ вар. |
Содержание задания |
1 |
Один поток готовит матрицу в памяти M = 1000х1000 байт со случайными числами от 0 до 255. Другой поток в это время принимает с клавиатуры два числа X, Y, а третий поток – готовит на экране окно для вывода результатов расчетов. Как только данные с клавиатуры введены – из подготовленного массива выбирается байт с индексом (X,Y) и выводится на экран в окне третьего потока. |
2 |
Имеется файл F1, в котором записано 20 слов (можно больше). Три потока генерируют случайные числа в диапазоне 0 – 100. Если сгенерированное число больше 90, поток генерирует случайное число n от 1 до 20, открывает файл F1, берет из него слово под номером n, открывает файл F2 и вписывает взятое слово в него файлы F1 и F2 закрываются. Каждый поток должен записать в файл F2 по три слова. Полученное предложение приложите в отчет. |
3 |
Три потока генерируют случайные числа в диапазоне от 0 до 1000. Если в потоке число попадется больше 900, поток выводит на экран (в случайном месте) окно, в котором непрерывно создаются одним потоком - закрашенные окружности случайных радиусов, другим потоком – прямоугольники, а третьим – треугольники. Одновременно на экране может быть не более пяти окон. Пользователь может закрыть одно из них. Тут же появляется другое. |
4 |
Пять потоков генерируют случайные числа в интервале от 0 до 1000. Если свободен мьютекс, поток вызывает функцию BIZNES и передает ей свой номер и сгенерированное число. Функция присуммирует полученное число к счету под номером обратившегося потока. Когда все потоки обратятся к функции BIZNES по 10 раз, программа выводит на экран итоговые суммы, накопившиеся на всех пяти счетах. |
5 |
Когда пользователь нажимает на клавишу по экрану снизу вверх двигается значок *. При нажатии на слева направо двигается значок >. Одновременно на экране может быть не более 3-х значков каждого типа. |
6 |
Приложение запускается три раза и создает три окна (последующие запуски к созданию окон не приводят). Когда приложение запускается с ключом /R все окна закрываются. |
7 |
Создать приложение 1, после запуска которого оно ждет, пока не будет запущено приложение 2 и дважды не будет запущено приложение 3, только тогда оно выводит сообщение «УСЛОВИЕ ВЫПОНЕНО» |
- тщательно откомментированный текст составленной программы вместе с результатами ее тестирования представить в отчете. Там же привести теоретический материал, на основе которого выполнялось задание.
- отчет оформить в электронной форме согласно СТП КнАГТУ.
Введение
Синхронизация потоков важна по нескольким причинам. В разных ситуациях для этой цели удобнее использовать разные механизмы операционной системы. Рассмотрим несколько возможных вариантов обеспечения синхронизации:
Вариант 1
Предположим, что вы разрабатываете программу различных вариантов обработки данных. Допустим, вы хотите максимизировать прибыли при разных вариантах производства, или вы ищете кратчайший путь через лабиринт или оптимизируете рабочий график. Для решения каждой из этих задач вы должны подготовить начальные данные, а затем проверить каждый из возможных вариантов их изменения. Подготовкой начальных данных обычно занимается основной поток программы, а анализом каждого из вариантов — отдельный дополнительный поток. Например, если вам надо проанализировать десять вариантов производства продукции, вы должны запустить десять потоков. Если существует сто различных путей через лабиринт, вам потребуется сто потоков, каждый из которых будет вычислять длину одного из путей. Когда основной поток завершит подготовку начальных данных, дополнительные потоки должны приступить к анализу этих данных при различных условиях. Когда дополнительные потоки завершат все вычисления, основной поток должен сравнить результаты их работы и сообщить об этих результатах пользователю.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.