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

Преамбула

Операционные системы реального времени обеспечивают одинаковое время выполнения одинаковых, параллельно выполняемых задач. Проверить, относится-ли ОС Windows к операционным системам реального времени, решив следующию задачу:

Задание

  1. Используя класс TThread, разработать программу оценки стабильности скорости работы параллельных однотипных задач. Дано: числа N - кол-во параллельно выполняемых задач, X - счетчик перебора, C - количество стартов набора задач. Каждая задача осуществляет перебор значений от 1 до X. Задачи стартуют последовательно, от первой до N-й. Окончание работы каждой задачи фиксируется и определяется, какой по счету она завершилась. По окончании работы последней задачи набор задач запускается снова (C раз). По окончании последнего цикла запуска набора задач программа высчитывает и выводит на экран квадратную матрицу вероятностей порядка завершения каждой задачи. Каждая строка матрицы - задача, каждый столбец - вероятность завершения указанной задачи в указанной позиции.

    Сделать выводы о механизмах реализации многозадачности.

    Дополнительная информация:

    При использовании несколькими потоками одних и тех-же глобальных переменных неатомарными методами (т.е. в несколько операторов) в каждом потоке следует использовать семафоры или мьютексы для блокирования других потоков. Это может понадобится, например, при сохранении в глобальном массиве номера завершившегося потока, т.к. увеличение кол-ва эл-в массива и сохранение в массиве - это два последовательно идущих оператора, между выполнением которых может "вклиниться" другой поток. Информацию об использовании семафоров и мьютексов можно найти в API-документации операционной системы (ключевые слова mutex, semaphore). Исходной точкой для поиска может служить, например меню ..\..delphi..\help\ms sdk help files\win32 programmer's reference

    Альтернативно, при решении задачи можно не использовать единые глобальные переменные, сохраняя, например, время работы каждого потока в отдельных элементах заранее определенного глобального массива и сортируя его по окончании затем для получения возрастающей последовательности. В этом случае точность вычисления будет значительно ниже. Для получения текущего даты-времени в Delphi используется функция Now()