Лабораторная работа 3 (1). Лабораторная работа 34 Синхронизация процессов и потоков в ос windows
Скачать 19.23 Kb.
|
Лабораторная работа 3-4 «Синхронизация процессов и потоков в ОС Windows » Для синхронизации использовать все способы: взаимоисключение (mutex), критическая секция (critical section), событие (event) и семафор (semaphore). Создайте программу, которая выполняет скалярное умножение двух векторов. Значения каждого вектора хранятся в отдельном файле, созданном с помощью текстового редактора. Программа должна прочитать значения вектора из первого файла и присвоить их элементам вектора, затем в отдельном потоке прочитать значения вектора из второго файла. Создайте программу, которая с помощью события синхронизирует операции записи и чтения данных из файла. Программа должна в основном потоке создать файл и записать в него данные. Чтение данных из созданного файла должно выполняться в отдельном потоке. Разработайте программу, которая выполняет перемножение двух матриц. Значения элементов каждой матрицы сохраняются в отдельном файле, создаваемом с помощью текстового редактора. Программа должна прочитать значения каждой матрицы в отдельных потоках. Создайте программу, которая в основном потоке формирует массив значений аргумента функции и записывает их в файл, в отдельном потоке читает значения аргумента из файла и вычисляет массив значений функции f(x) = exp (x). Создайте программу, которая выполняет запись данных из двух отдельных потоков в один файл. Создайте программу, которая выполняет чтение данных из одного файла в двух потоках. Создайте программу, которая выводит на экран символьную информацию. Далее программа должна в отдельном потоке 3 раза заменить символ в определенной позиции на другой. * Разработайте программу, которая выполняет сложение двух матриц. Значения элементов каждой матрицы сохраняются в отдельном файле, создаваемом с помощью текстового редактора. Программа должна прочитать значения каждой матрицы в отдельных потоках. Создайте программу, которая демонстрирует работу двух потоков с глобальным массивом. В основном потоке случайным образом генерируется массив из 100 элементов, затем в дополнительном потоке вычисляется среднее значение сгенерированной последовательности. Операцию создания (генерирования) массива и вычисления среднего значения повторить 10 раз. Создать два потока. Первый ищет числа Фибоначчи (каждое последующее число равно сумме двух предыдущих чисел), второй простые числа. Результат работы каждого потока выводит их на экран. После остановки потока показывать количество найденных чисел Фибоначчи и простых чисел. Создать два потока. Первый поток производит запись в массив случайных данных. Второй производит чтение данных из этого массива и вывод их на экран. Вычислить 10-ю степень двойки в разных потоках: сложением, умножением и просто возведением в степень. Три потока. Первый считывает числа со стандартного ввода и записывает их в список в отсортированном порядке. Второй и третий потоки периодически (задержка в миллисекундах задается в качестве аргумента исполняемой программы) удаляют из списка наименьший элемент и выводят его значение на стандартный вывод. Параллельный алгоритм сортировки слиянием организован следующим образом: Исходная последовательность разбивается на две части, которые помещаются в два потока. Каждый поток сортирует свою часть данных. Потоки обмениваются отсортированными данными. Потоками выполняется слияние полученных последовательностей, после чего в первом потоке остается первая половина данных, во втором – вторая. Реализуйте алгоритм параллельной сортировки слиянием. Три потока. . Первый считывает числа со стандартного ввода и записывает их в список в отсортированном порядке. Второй и третий периодически вычисляют среднее арифметическое от элементов и длину списка, соответственно. Контрольные вопросы: 1. Что такое поток? 2. Как создать новый поток? 3. Чем поток отличается от процесса? 4. Как запустить поток после завершения другого потока? 5. Как присвоить потоку имя? 6. Как заблокировать данные от изменения другими потоками? 7. Как остановить выполнение потока? |