Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные задачи по ОС обновление2.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
151 Кб
Скачать
☆

Процесс Child:

  • Согласно индивидуальным вариантам Child выполняет:

1. Выполнить суммирование элементов итогового массива до заданной позиции k;

2. Найти в массиве повторяющиеся элементы (разместить их группы в массиве слева, остальные (одиночные) - соответственно справа). Тип элементов - вещественные числа.

3. Сортировка методом “пузырька”. Тип элементов - вещественные числа двойной точности

4. Поиск в массиве элементов из диапазона [A,B] (разместить их в массиве слева, остальные элементы массива - заполнить нулями). Тип элементов - целые числа без знака.

5. Сортировка выбором. Тип элементов - символы.

6. Поиск в массиве элементов >A (разместить их в массиве слева, остальные элементы массива - заполнить нулями). Тип элементов - целые числа без знака.

7. Поиск в массиве простых чисел (разместить их в массиве слева, остальные элементы массива - справа). Тип элементов - целые числа без знака.

8. Поиск в массиве элементов =X (разместить их в массиве слева, остальные элементы массива - справа). Тип элементов - символы.

9. Выполнить произведение элементов итогового массива до заданной позиции k; Тип элементов - целые числа, без знака.

10. Поиск в массиве лексем, (разделители – цифры). Полученные лексемы поместить в массиве слева, разделитель - пробел, остальные элементы - заполнить символом ‘0’. Тип элементов массива - символы.

11. Приведение массива к палиндрому (получившейся палиндром поместить в массиве слева, а лишние элементы соответственно – справа ) Тип элементов - символы

12. Сортировка выбором. Тип элементов - целые числа.

Примечания.

Для ожидания завершения работы процесса Child использовать функцию:

DWORD WaitForSingleObject(

HANDLE hHandle, // дескриптор объекта

DWORD dwMilliseconds // интервал ожидания в миллисекундах

);

где второй параметр установить равным INFINITE, например

WaitForSingleObject(hProcess, INFINITE); // ждать завершения процесса

Здесь hProcess – дескриптор процесса Child.

Дополнительное (или штрафное после 7.03) задание:

  1. завершить процесс с помощью функции TerminateProcess

  2. завершить процесс Parent с помощью функции ExitProcess;

Лабораторная работа №3.

Тема: «Синхронизация потоков».

Сдать до 20.03

Написать программу для консольного процесса, который состоит из трёх потоков: main , work, и третьего (см. варианты). Синхронизировать main и work, с помощью любых объектов синхронизации.

Глобальные переменные не использовать!

Индивидуальные варианты:

3.1 Поток main должен выполнить следующие действия:

  • создать массив, размерность и элементы которого вводятся пользователем с консоли;

  • вывести размерность и элементы исходного массива на консоль;

  • ввести число k;

  • запустить поток work;

  • запустить поток SumElement;

  • выводить на экран поэлементно элементы массива (итогового) параллельно с работой потока work;

  • известить поток SumElement о начале суммирования (момент запуска произойдёт после того, будут выведены на консоль k элементов массива (использовать событие);

  • Вывести на экран результат работы потока SumElement;

Поток work должен выполнить следующие действия:

  • запросить у пользователя временной интервал, требуемый для отдыха после подготовки одного элемента в массиве;

  • Найти в массиве неповторяющиеся элементы (разместить их в массиве слева, остальные соответственно справа). Элементы - символы.

  • извещать поток main о новом элементе;

  • после каждого готового элемента отдыхать в течение заданного интервала времени;

Поток SumElement должен выполнить следующие действия (Для синхронизации с потоком main, использовать критическую секцию, событие)

  • ждёт от потока main сигнал о начале суммирования(использовать событие);

  • выполнить суммирование элементов итогового массива до заданной позиции k;

  • известить(использовать критическую секцию) поток main о выводе результата