Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int** A;
- int** B;
- int** Res;
- int number;
- //стартовая функция для дочерних потоков
- void* func(void* param)
- {
- for (int i=0 ; i<number ; i++)
- {
- Res[(int)param][i]=0;
- for (int j=0 ; j< number; j++)
- Res[(int)param][i]+=A[(int)param][j]*B[j][i];
- }
- return (void*)Res;
- }
- int main()
- {
- int size=0;
- int numberT = 0;
- char sym = ' ';
- int resultnum = 0;
- std::cout << "Do you want to enter the number of threads? y or n ";
- std::cin >> sym;
- if (sym = 'y')
- {
- //колво потоков
- std::cout << "Enter the number of threads ";
- std::cin >> numberT;
- }
- //первая матрица
- std::cout << "Enter the arrays size, please...";
- std::cin >> size;
- number = size;
- A = new int* [size];
- for (int i = 0; i < size; i++)
- {
- A[i] = new int[size];
- }
- B = new int* [size];
- for (int i = 0; i < size; i++)
- {
- B[i] = new int[size];
- }
- //заполнение массива
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- A[i][j] = rand() % 10 + 1;
- }
- std::this_thread::sleep_for(std::chrono::milliseconds(3));
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- B[i][j] = rand() % 10 + 1;
- }
- //вывод
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < size; j++)
- {
- std::cout << A[i][j] << " ";
- }
- std::cout << "\n";
- }
- std::cout << "\n\n";
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < size; j++)
- {
- std::cout << B[i][j] << " ";
- }
- std::cout << "\n";
- }
- Res = new int* [size];
- for (int i = 0; i < size; i++)
- {
- Res[i] = new int[size];
- }
- if (sym = 'y')
- {
- resultnum = numberT;
- }
- else
- resultnum = size;
- pthread_t* thread = new pthread_t[resultnum];
- ////создание дочерних потоков
- for (int i = 0; i < size; i++) pthread_create(&thread[i], NULL, func, (void*)(i));
- for (int i = 0; i < size; i++)
- {
- //я ебала эту лабу
- pthread_join(thread[i], NULL); //ожидание завершения работы дочерних потоков
- }
- /*pthread_join(mythread1, NULL); pthread_join(mythread2, NULL);*/
- // вывод результата вычислений всех потоков
- for (int i = 0; i < size; i++) {
- fprintf(stdout, "\n");
- for (int j = 0; j < size; j++)
- fprintf(stdout, "%d ", Res[i][j]);
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement