/
AirLexa
/
06
Обзор
Документация
Войти
/
AirLexa
/
06
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lesson_06/SafeQueue/SafeQueue.cpp
88 строк
3 KB
AirLexa
курсовая
19 июн 2026, 14:48
Верифицирован
19 июн 2026, 14:48
d9b94c2
Код
Авторство
О чём код?
#include <iostream> #include <chrono> #include <thread> #include <mutex> #include <sstream> #include <windows.h> #include "thread_pool.h" // Мьютекс только для того, чтобы вывод в консоль не "перемешивался" std::mutex cout_mutex; void print_safe(const std::string& message) { std::lock_guard<std::mutex> lock(cout_mutex); std::cout << message << std::endl; } // Тестовые функции void task_alpha() { std::ostringstream oss; oss << "[поток " << std::this_thread::get_id() << "] task_alpha() работает"; print_safe(oss.str()); std::this_thread::sleep_for(std::chrono::milliseconds(200)); oss.str(""); oss << "[поток " << std::this_thread::get_id() << "] task_alpha() готов"; print_safe(oss.str()); } void task_beta() { std::ostringstream oss; oss << "[поток " << std::this_thread::get_id() << "] task_beta() работает"; print_safe(oss.str()); std::this_thread::sleep_for(std::chrono::milliseconds(200)); oss.str(""); oss << "[поток " << std::this_thread::get_id() << "] task_beta() готов"; print_safe(oss.str()); } // Пример функции с результатом int task_gamma(int a, int b) { std::ostringstream oss; oss << "[поток " << std::this_thread::get_id() << "] task_gamma(" << a << ", " << b << ") работает"; print_safe(oss.str()); std::this_thread::sleep_for(std::chrono::milliseconds(150)); return a + b; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); std::cout << "Количество ядер процессора: " << std::thread::hardware_concurrency() << std::endl; thread_pool pool; std::cout << "Создан пул потоков, рабочие потоки: " << pool.thread_count() << std::endl; // Раз в секунду кладём в пул одновременно 2 функции for (int i = 0; i < 5; ++i) { print_safe(">>> Итерация " + std::to_string(i) + ": отправка 2-х задач"); pool.submit(task_alpha); pool.submit(task_beta); auto future_result = pool.submit_task(task_gamma, i, i * 10); int sum = future_result.get(); print_safe(" task_gamma результат: " + std::to_string(sum)); std::this_thread::sleep_for(std::chrono::seconds(1)); } print_safe("Ждем завершения всех задач и закрываем пул..."); return 0; }