Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. #include <pthread.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <math.h>
  5. #include <cstdlib>
  6. #include <Windows.h>
  7. #include <fstream>
  8.  
  9. using namespace std;
  10. pthread_barrier_t barr;
  11.  
  12. class Arrays//класс хранит масив
  13. {
  14. vector< vector <int>> myArray_;
  15. int size_;
  16. int maxValue_;
  17. public:
  18. Arrays(int size, int val) :size_(size), maxValue_(val)
  19. {
  20. myArray_.resize(size_);
  21. for (int j = 0; j < size_; j++)
  22. {
  23. myArray_[j].resize(size_);
  24. }
  25. }
  26.  
  27. void createArray()//задаем случайные значения для массива
  28. {
  29. for (int j=0; j < size_; j++)
  30. {
  31. for (int i = 0; i < size_; i++)
  32. {
  33. myArray_[j][i] = (rand()%(maxValue_+1));
  34. }
  35. }
  36. }
  37.  
  38. int getElement(int i, int j)
  39. {
  40. return myArray_[i][j];
  41. }
  42.  
  43. //печатаем массив
  44. void outArray(ostream &os)
  45. {
  46. os << "\narray\n";
  47. for (int i = 0; i < size_; i++)
  48. {
  49. for (int j = 0; j < size_; j++)
  50. {
  51. os << myArray_[i][j]<<" ";
  52. }
  53. os<< "\n";
  54. }
  55. }
  56. };
  57.  
  58. struct AllArrays
  59. {
  60. vector < Arrays> myArray;
  61. int threadQty_;
  62. vector <int> result;
  63. int size_;
  64. int maxValue_;
  65.  
  66. AllArrays(int num, int size, int maxValue) :size_(size), maxValue_(maxValue),threadQty_(num)
  67. {
  68. myArray.reserve(threadQty_);
  69. for (int numThr = 0; numThr < threadQty_; numThr++)
  70. {
  71. myArray.push_back(Arrays(size_, maxValue_));
  72. }
  73. }
  74.  
  75.  
  76. void printAll(ostream &os)
  77. {
  78. for (int i = 0; i < threadQty_; i++)
  79. {
  80. myArray[i].outArray(os);
  81. }
  82. os << "\n";
  83. }
  84.  
  85. void printResult(ostream &os)
  86. {
  87. os << "result: ";
  88.  
  89. for (int i = 0; i < result.size(); i++)
  90. {
  91. os << result[i] << " ";
  92. }
  93. os << "\n";
  94. }
  95.  
  96.  
  97. void checkArray()//???????
  98. {
  99. vector<vector<int>> buff;
  100. buff.resize(threadQty_);
  101. for(int j=0;j<size_;j++)//проход по строкам
  102. {
  103. for (int i = 0; i < threadQty_; i++)//проход по массивам
  104. {
  105. buff[i].resize(size_);
  106. for (int k = 0; k < size_; k++)
  107. {
  108. buff[i][k] =myArray[i].getElement(j,k) ;
  109. }
  110. }
  111.  
  112. int value;
  113. int checkValue;
  114. for (int val = 0; val < maxValue_; val++)
  115. {
  116. checkValue = 0;
  117. for (int l = 0; l < threadQty_; l++)
  118. {
  119. for (int h = 0; h < size_; h++)
  120. {
  121. if (val == buff[l][h])
  122. {
  123. checkValue++;
  124. break;
  125. }
  126. }
  127. }
  128.  
  129. if (checkValue == threadQty_)
  130. {
  131. result.push_back(j);
  132. break;
  133. }
  134. }
  135. }
  136. }
  137.  
  138.  
  139. };
  140.  
  141. struct NumArray
  142. {
  143. int num_;
  144. AllArrays *Arrays_;
  145. int maxvalue_;
  146. NumArray(int num, AllArrays *arrays,int myRand):num_(num),Arrays_(arrays), maxvalue_(myRand)
  147. {}
  148.  
  149. };
  150.  
  151. void* arraythread(void* arg)
  152. {
  153. NumArray &myArray = *(NumArray*)arg;
  154. AllArrays *ptrArray = myArray.Arrays_;
  155. int numThread = myArray.num_;
  156. srand(123 * numThread + (numThread+2) *(-12*numThread));
  157. ptrArray->myArray[numThread].createArray();
  158. pthread_barrier_wait(&barr);//1 барьер=массивы заполены значениями
  159.  
  160.  
  161. return(0);
  162. }
  163.  
  164. int main()
  165. {
  166. const int threadQty = 2;
  167. int maxValue = 99;
  168. AllArrays myArray(threadQty,10, maxValue);
  169. AllArrays *ptrArray = &myArray;
  170. pthread_t thread[threadQty];
  171. vector <NumArray> num;
  172. num.reserve(threadQty);
  173. pthread_barrier_init(&barr, NULL, threadQty + 1);//создаем барьер
  174.  
  175. for (int i = 0; i < threadQty; i++)
  176. {
  177. num.push_back(NumArray(i, ptrArray, maxValue));
  178. pthread_create(&thread[i], NULL, arraythread, &num[i]);//запускаем потоки
  179. }
  180.  
  181. pthread_barrier_wait(&barr);
  182. myArray.checkArray();
  183. myArray.printResult(cout);
  184. myArray.printAll(cout);
  185.  
  186. for (int i = 0; i < threadQty; i++)
  187. {
  188. pthread_join(thread[i], NULL);//ожидаем завершения потоков
  189. }
  190.  
  191. //myArray.result(cout);//печатаем результат в файлл
  192.  
  193. system("pause");
  194. return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement