Вариант 2. Какова активность потоков, реакция программы на выбор пунктов меню и соотношение количества прямоугольников при выключенном взаимном исключении и приоритете одного потока на 1, 2 ниже, чем у прочих?
Вариант 3. Какова активность потоков, реакция программы на выбор пунктов меню и соотношение количества прямоугольников при выключенном взаимном исключении, равных приоритетах и приостановленном одном или нескольких потоках?
Вариант 4. Какова активность потоков, реакция программы на выбор пунктов меню и соотношение количества прямоугольников при выключенном взаимном исключении и максимальных приоритетах всех рисующих потоков?
Вариант 5. В чем выражается включенное состояние режима взаимного исключения?
Вариант 6. Как ведут себя потоки при включенном режиме взаимного исключения и неравных приоритетах?
Вариант 7. Что будет, если при включенном взаимном исключении приостановить активный в данный момент поток («поймать» mutex)?
Вариант 8. Что будет, если при включенном взаимном исключении приостановить не активный в данный момент поток?
Вариант 9. Что происходит при изменении размеров окна?
Вариант 10. Насколько быстро реагирует программа на включение-выключение режима взаимного исключения?
Следует заметить, что, в зависимости от особенностей настройки аппаратного и программного обеспечения, степень параллельности выполнения потоков и влияние приоритетов может сильно отличаться на разных компьютерах. Поэтому диапазон «правильных» ответов весьма широк. При приеме данного задания оценивается в первую очередь наличие личного опыта наблюдения за параллельным выполнением потоков и основанное на нем интуитивное понимание принципов параллельности, приоритетов и взаимного исключения.
Задание 2. Изучить код программы (threads.c). Используя непосредственное чтение кода и комментариев к нему, приведенные ниже теоретические сведения и справочную систему, найти ответы на следующие вопросы.
Вариант 0. Что происходит раньше, создание главного или дочерних окон? Почему?
Вариант 1. Что происходит раньше, создание окон или рисующих потоков? Почему?
Вариант 2. Что происходит раньше, создание потоков или семафора? Почему?
Вариант 3. Что происходит раньше, создание окна-списка или инициализация таймера? Почему?
Вариант 4. Укажите массив, в котором хранятся дескрипторы дочерних окон. Приведите строки кода, где происходит запоминание значений дескрипторов, и где запомненные значения используются для изменения размеров окон и для рисования (т.е. для получения доступа к device context).
Вариант 5. Укажите переменную, в которой хранится дескриптор взаимоисключающего семафора (mutex). Приведите строки кода, где происходит запоминание значения дескриптора, и где запомненное значение используется для захвата и освобождения семафора.
Вариант 6. Укажите массив, в котором хранятся дескрипторы (handles) дочерних потоков. Приведите копии строк кода, где происходит запоминание значений дескрипторов, и где запомненное значение дескриптора используется для приостановки потока по выбору пункта меню «Suspend».
Вариант 7. Как часто, по какому событию происходит обновление текста со статистической информацией в верхней части окна?
Вариант 8. Сколько прямоугольников рисует отдельный поток за один вызов процедуры DrawProc?
Вариант 9. Почему количества прямоугольников, отображаемые в окне-списке не всегда кратны их количеству в цикле процедуры DrawProc?
Вариант 10. В каком режиме работы программы потоку удастся вывести задуманное число прямоугольников за один цикл активности?
Задание 4. Модифицируйте программу Threads таким образом, чтобы выполнялись следующие условия. Приведите модифицированные участки кода. Опишите поведение программы.
Вариант 0. Количество прямоугольников в цикле процедуры DrawProc было таково, что время активности потока в режиме взаимного исключения составляет примерно 2 секунды.
Вариант 1. Для рисования прямоугольников используются полутона серого.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.