fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <thread>
  4. #include <chrono>
  5.  
  6. // Функция для вычисления факториала
  7. unsigned long long factorial(int n) {
  8. if (n == 0) return 1;
  9. return n * factorial(n - 1);
  10. }
  11.  
  12. // Функция выполнения длительных вычислений
  13. void performCalculations(int id) {
  14. try {
  15. int number = 20; // Число для вычисления факториала
  16. unsigned long long result = factorial(number);
  17. std::cout << "Факториал числа " << number << " равен " << result << " (ID: " << id << ")" << std::endl;
  18. }
  19. catch (const std::exception& e) {
  20. std::cerr << "Исключение: " << e.what() << std::endl;
  21. }
  22. catch (...) {
  23. std::cerr << "Неизвестное исключение" << std::endl;
  24. }
  25. }
  26.  
  27. int main() {
  28. setlocale(LC_ALL, "Rus");
  29.  
  30. const int numChildren = 3; // Количество дочерних потоков
  31. std::vector<std::thread> threads;
  32. std::vector<std::chrono::time_point<std::chrono::high_resolution_clock>> startTimes, endTimes;
  33.  
  34. // Запуск и измерение времени выполнения потоков
  35. for (int i = 0; i < numChildren; ++i) {
  36. startTimes.push_back(std::chrono::high_resolution_clock::now());
  37. threads.emplace_back(performCalculations, i + 1);
  38. }
  39.  
  40. for (auto& t : threads) {
  41. t.join(); // Ожидание завершения дочернего потока
  42. endTimes.push_back(std::chrono::high_resolution_clock::now());
  43. }
  44.  
  45. // Вывод времени выполнения потоков
  46. for (int i = 0; i < numChildren; ++i) {
  47. double duration = std::chrono::duration<double>(endTimes[i] - startTimes[i]).count();
  48. std::cout << "Поток " << i + 1 << " выполнился за " << duration << " секунд." << std::endl;
  49. }
  50.  
  51. std::cout << "Все дочерние потоки завершены." << std::endl;
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Факториал числа 20 равен 2432902008176640000 (ID: 3)
Факториал числа 20 равен 2432902008176640000 (ID: 2)
Факториал числа 20 равен 2432902008176640000 (ID: 1)
Поток 1 выполнился за 0.000593165 секунд.
Поток 2 выполнился за 0.000340497 секунд.
Поток 3 выполнился за 0.000309507 секунд.
Все дочерние потоки завершены.