Advertisement
Guest User

7

a guest
Jun 19th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #include<iostream>
  2. #include<thread>
  3. #include<mutex>
  4. #include<ctime>
  5.  
  6. std::mutex block;
  7.  
  8.  
  9. // Проверяем все элементы по порядку
  10. void Max1(int **mat, int m, int n) {
  11. int max = mat[0][0];
  12. for (size_t i = 0; i < m; i++)
  13. for (size_t j = 0; j < n; j++)
  14. if (max < mat[i][j])
  15. max = mat[i][j];
  16. std::cout << "\t Max element =" << max;
  17. }
  18.  
  19. // Проверяем все элементы строки
  20. void Max2(int *mat, int n, int &temp) {
  21. int t = mat[0];
  22. for (size_t i = 0; i < n; i++)
  23. if (t < mat[i])
  24. t = mat[i];
  25. block.lock();
  26. std::cout << " "<< t <<" ";
  27. block.unlock();
  28. temp = t;
  29. }
  30.  
  31. void main() {
  32. srand(time(NULL));
  33. unsigned int start_time, end_time;
  34.  
  35. // Создание, заполнение и вывод матрицы
  36. int m, n;
  37. std::cout << "\tEnter M and N\n"; std::cin >> m >> n;
  38. int **mat = new int *[m];
  39. for (size_t i = 0; i < m; i++)
  40. mat[i] = new int[n];
  41. for (size_t i = 0; i < m; i++) {
  42. for (size_t j = 0; j < n; j++) {
  43. mat[i][j] = rand() % 100;
  44. std::cout << mat[i][j] << " ";
  45. }
  46. std::cout << std::endl;
  47. }
  48.  
  49. // Выполнение задачи в 1 поток
  50. std::cout << "\n\tV 1:\n";
  51. start_time = clock();
  52. std::thread t1(Max1, std::ref(mat), m, n);
  53. t1.join();
  54. end_time = clock();
  55. std::cout << "\n\tThread work time = " << end_time - start_time << " milliseconds\n\n";
  56. std::cout << "\n\n";
  57.  
  58.  
  59. // Разбиение на m потоков
  60. std::cout << "\n\tV 2:";
  61. std::thread *threads = new std::thread[m];
  62. int T = 0;
  63. start_time = clock();
  64. for (size_t i = 0; i < m; i++)
  65. threads[i] = std::thread(Max2, mat[i], n, std::ref(T));
  66. for (size_t i = 0; i < m; i++)
  67. threads[i].join();
  68.  
  69. end_time = clock();
  70. std::cout << "\n\tMax element = " << T;
  71. std::cout << "\n\tThread work time = " << end_time - start_time << " milliseconds\n\n";
  72.  
  73. system("pause");
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement