/
IT-Legion
/
examples
Обзор
Документация
Войти
/
IT-Legion
/
examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cpu_bound_task.cpp
48 строк
2 KB
Перевозников Сергей Николаевич
create cpu_bound_task.cpp
14 янв 2026, 19:03
14 янв 2026, 19:03
007a749
Код
Авторство
О чём код?
#include <iostream> #include <chrono> #include <vector> #include <thread> #include <future> // Функция, выполняемая в отдельном потоке void cpuBoundTask(int threadNumber) { auto startTime = std::chrono::high_resolution_clock::now(); // Начало отсчета времени std::cout << "Поток " << threadNumber << " начал работу в "; std::cout << std::chrono::system_clock::to_time_t(startTime) << "\n"; unsigned long long result = 1; // Вычисление факториала большого числа for (unsigned int i = 1; i <= 1000000; ++i) { result *= i; } auto endTime = std::chrono::high_resolution_clock::now(); // Конец отсчета времени double elapsedSeconds = std::chrono::duration<double>(endTime - startTime).count(); std::cout << "Поток " << threadNumber << " завершил работу в "; std::cout << std::chrono::system_clock::to_time_t(endTime); std::cout << ", затрачено: " << elapsedSeconds << " сек\n"; } int main() { const int numThreads = 4; // Количество потоков std::vector<std::future<void>> futures; // Хранит будущие значения результатов потоков auto overallStartTime = std::chrono::high_resolution_clock::now(); // Общее начало времени // Запускаем потоки for (int i = 0; i < numThreads; ++i) { futures.push_back(std::async(std::launch::async, &cpuBoundTask, i)); } // Ждем завершения всех потоков for (auto& future : futures) { future.wait(); } auto overallEndTime = std::chrono::high_resolution_clock::now(); // Общее завершение времени double totalElapsedSeconds = std::chrono::duration<double>(overallEndTime - overallStartTime).count(); std::cout << "Все потоки завершены.\nОбщее время выполнения: " << totalElapsedSeconds << " секунд\n"; return 0; }