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

10. Порядок выполнения работы

  1. Создать консольное приложение.

  2. Создать поток. Функция потока должна выдавать сообщение о запуске потока. Чтобы поток успел стартовать и вывести сообщение необходимо после его запуска ожидать нажатия клавиши или вызвать задержку.

  3. Переделать запуск потока, так чтобы он стартовал в приостановленном состоянии и возобновлялся по нажатию клавиши – 1 и приостанавливался по клавише - 2. Вставить в функцию потока бесконечный цикл внутри, которого выдавать сообщение каждые 500 мс о том, что тот активен. Управление потоком осуществлять из функции main.

  4. Передать в функцию потока в качестве параметра адрес строки. Поток должен выводить строку, а также выводить количество заглавных букв в строке. Поместить обработку строки в бесконечный цикл см. предыдущий пункт.

  5. Завести второй поток. В функцию второго потока также передавать адрес той же строки, что и функции первого потока. Функция второго потока должна каждые 300 мс менять содержимое строки случайным образом (можно завести несколько вариантов строк одинакового размера и менять их случайным образом).

  6. Реализовать управление вторым потоком из функции main: клавиша 3 – приостановка, 4 – возобновление.

  7. Поуправлять потоками, посмотреть, как обрабатывается и выводится строка. Реализовать синхронизацию потоков с помощью критической секции, разграничить доступ к строке, то есть сделать так, чтобы пока первый поток выводит строку, второй не мог менять ее. При захвате ресурса каждый поток должен сообщать об этом.

  8. Модифицировать программу так, чтобы поток сообщал о том, что ресурс занят другим потоком (только под Windows 2000 – TryEnterCriticalSection).

  9. Попробовать добавить в функцию одного из потоков после вызова функции Sleep – вызов SwitchToThread (только под Windows 2000).

  10. Расширить возможности управления потоками, так чтобы можно было из функции main убить первый поток – клавиша 5, второй – клавиша 6, запустить первый поток – клавиша 7, второй – клавиша 8.

  11. Попробовать остановить один из потоков. Посмотреть и объяснить реакцию программы. Попробовать убить один из потоков, затем вновь создать его. Посмотреть и объяснить реакцию программы.

11. Контрольные вопросы

  1. Дайте определение потоку. Для чего используются потоки?

  2. Для чего используется функция потока?

  3. Какие параметры можно передавать в функцию потока?

  4. Как запускаются потоки? Как запустить поток в приостановленном состоянии?

  5. Как остановить поток?

  6. Как возобновить выполнение потока?

  7. Как поток может отказаться от своего кванта времени?

  8. В чем состоит проблема синхронизации потоков?

  9. Что такое критические секции и для чего они используются?

  10. Какие правила необходимо соблюдать при использовании критических секций?