ЗадачаПрограммированиеГод: 2024ВГУИТ: Воронежский государственный университет инженерных технологий
👁 13💼 0

Готовая задача: Многопоточность и таймеры в C++

Загружена: 24.02.2026 05:23

Реализация практических примеров многопоточного программирования на C++: запуск 5 потоков с периодической задержкой, настройка пула потоков и два фоновых потока для обработки половины матрицы 1000x600. Полезно для закрепления навыков работы со std::thread, mutex и таймерами.

Содержание

Параллельное программирование

Контрольная работа для студентов заочного обучения

Вариант№ 9

Задание 1. Создание многопоточного приложения, состоящего из 5 потоков, организующих бесконечный вывод чисел от N до M и временную приостановку потока на Q мс после каждой итерации.

Подробное описание

📘 О чем эта работа

В работе приведены три конкретных примера реализации параллельных программ на C++: 1) запуск 5 постоянно работающих потоков, генерирующих случайные числа и приостанавливающихся на Q миллисекунд (в примере Q=200); 2) организация пула потоков с генерацией случайных чисел и двумя потоками фронта для вычислений на матрице; 3) одновременная работа Q таймеров, каждый из которых с периодичностью N*10 мс выводит случайное число. Объект — многопоточные C++-программы, предмет — методы синхронизации, генерации случайных чисел и управление временем выполнения потоков.

📚 Что внутри

В наборе кода и пояснений содержатся практические фрагменты и пояснения по использованию стандартных средств C++ для параллелизма:

  • Пример 1: старт массива из 5 потоков, которые в бесконечном цикле выводят случайные числа в диапазоне N..M (в примере N=200, M=208) и делают pause через std::this_thread::sleep_for(Q ms).
  • Пример 2: установка максимального числа рабочих потоков через std::thread::hardware_concurrency(), запуск пула потоков для K итераций (в примере K=10) и создание двух вычислительных потоков для обработки половины матрицы размером matrixRows=1000 x matrixCols=600. В коде показано создание вектора векторов std::vector> и заполнение ячеек как matrix[i][j] = i + j.
  • Пример 3: реализация Q таймеров (в примере Q=200), где каждый таймер выводит случайное число и идентификатор потока с периодичностью N*10 мс. Показывается использование std::chrono, std::random_device, std::mt19937 и std::uniform_int_distribution<>.
  • Синхронизация и вывод: демонстрируется применение std::mutex и std::lock_guard для безопасного доступа к std::cout при параллельном выводе.

📊 Для кого подходит

Материал полезен студентам и преподавателям курсов по параллельному программированию, операционным системам и системному программированию. Подходит для выполнения контрольных и лабораторных работ по C++ (модули по std::thread, синхронизации и таймерам), а также для самостоятельного изучения практик работы с пулом потоков и параллельной обработкой матриц.

✨ Особенности

Ключевые преимущества — рабочие примеры кода с конкретными константами (N, M, Q, K, размеры матрицы 1000x600), явное использование генераторов случайных чисел (std::random_device + mt19937 + uniform_int_distribution), управление количеством потоков через hardware_concurrency(), безопасный вывод через mutex и практическая реализация таймеров через sleep_for с периодичностью N*10 мс. Код легко адаптировать: сменить диапазон N..M, количество потоков, логики заполнения матрицы или время ожидания.

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура примеров ориентирована на стандартные требования по программированию: код сопровождается комментариями и использует только STL, поэтому легко интегрируется в отчёт или демонстрацию.

Можно адаптировать?
Да. В примерах указаны конкретные значения (например, matrixRows=1000, matrixCols=600, K=10, Q=200), которые можно изменить под требуемые условия задания. Логика заполнения матрицы (matrix[i][j] = i + j) может быть заменена на любую арифметику или вычисления.

Дополнительные замечания: В коде предусмотрено ожидание завершения потоков через thread.join(), показаны проблемы бесконечных циклов в демонстрационных примерах и способы безопасного вывода в многопоточной среде. Примеры совместимы с компиляторами, поддерживающими C++11 и выше.