Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. int** A;
  2. int** B;
  3. int** Res;
  4. int number;
  5.  
  6.  
  7. //стартовая функция для дочерних потоков
  8. void* func(void* param)
  9. {
  10. for (int i=0 ; i<number ; i++)
  11. {
  12. Res[(int)param][i]=0;
  13. for (int j=0 ; j< number; j++)
  14. Res[(int)param][i]+=A[(int)param][j]*B[j][i];
  15. }
  16.  
  17. return (void*)Res;
  18. }
  19.  
  20. int main()
  21. {
  22. int size=0;
  23. int numberT = 0;
  24. char sym = ' ';
  25. int resultnum = 0;
  26.  
  27. std::cout << "Do you want to enter the number of threads? y or n ";
  28. std::cin >> sym;
  29. if (sym = 'y')
  30. {
  31. //колво потоков
  32. std::cout << "Enter the number of threads ";
  33. std::cin >> numberT;
  34.  
  35. }
  36.  
  37. //первая матрица
  38. std::cout << "Enter the arrays size, please...";
  39. std::cin >> size;
  40.  
  41. number = size;
  42.  
  43. A = new int* [size];
  44.  
  45. for (int i = 0; i < size; i++)
  46. {
  47. A[i] = new int[size];
  48. }
  49.  
  50.  
  51. B = new int* [size];
  52.  
  53. for (int i = 0; i < size; i++)
  54. {
  55. B[i] = new int[size];
  56. }
  57.  
  58.  
  59.  
  60. //заполнение массива
  61. for (int i = 0; i < size; i++)
  62. for (int j = 0; j < size; j++)
  63. {
  64. A[i][j] = rand() % 10 + 1;
  65. }
  66.  
  67. std::this_thread::sleep_for(std::chrono::milliseconds(3));
  68.  
  69. for (int i = 0; i < size; i++)
  70. for (int j = 0; j < size; j++)
  71. {
  72. B[i][j] = rand() % 10 + 1;
  73. }
  74.  
  75. //вывод
  76. for (int i = 0; i < size; i++)
  77. {
  78. for (int j = 0; j < size; j++)
  79. {
  80. std::cout << A[i][j] << " ";
  81. }
  82. std::cout << "\n";
  83. }
  84.  
  85. std::cout << "\n\n";
  86.  
  87. for (int i = 0; i < size; i++)
  88. {
  89. for (int j = 0; j < size; j++)
  90. {
  91. std::cout << B[i][j] << " ";
  92. }
  93. std::cout << "\n";
  94. }
  95.  
  96. Res = new int* [size];
  97.  
  98. for (int i = 0; i < size; i++)
  99. {
  100. Res[i] = new int[size];
  101. }
  102.  
  103. if (sym = 'y')
  104. {
  105. resultnum = numberT;
  106. }
  107. else
  108. resultnum = size;
  109.  
  110.  
  111.  
  112. pthread_t* thread = new pthread_t[resultnum];
  113.  
  114.  
  115.  
  116.  
  117. ////создание дочерних потоков
  118. for (int i = 0; i < size; i++) pthread_create(&thread[i], NULL, func, (void*)(i));
  119. for (int i = 0; i < size; i++)
  120. {
  121. //я ебала эту лабу
  122.  
  123. pthread_join(thread[i], NULL); //ожидание завершения работы дочерних потоков
  124.  
  125. }
  126.  
  127. /*pthread_join(mythread1, NULL); pthread_join(mythread2, NULL);*/
  128. // вывод результата вычислений всех потоков
  129. for (int i = 0; i < size; i++) {
  130. fprintf(stdout, "\n");
  131. for (int j = 0; j < size; j++)
  132. fprintf(stdout, "%d ", Res[i][j]);
  133. }
  134. return 1;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement