Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<thread>
- #include<mutex>
- #include<ctime>
- std::mutex block;
- // Проверяем все элементы по порядку
- void Max1(int **mat, int m, int n) {
- int max = mat[0][0];
- for (size_t i = 0; i < m; i++)
- for (size_t j = 0; j < n; j++)
- if (max < mat[i][j])
- max = mat[i][j];
- std::cout << "\t Max element =" << max;
- }
- // Проверяем все элементы строки
- void Max2(int *mat, int n, int &temp) {
- int t = mat[0];
- for (size_t i = 0; i < n; i++)
- if (t < mat[i])
- t = mat[i];
- block.lock();
- std::cout << " "<< t <<" ";
- block.unlock();
- temp = t;
- }
- void main() {
- srand(time(NULL));
- unsigned int start_time, end_time;
- // Создание, заполнение и вывод матрицы
- int m, n;
- std::cout << "\tEnter M and N\n"; std::cin >> m >> n;
- int **mat = new int *[m];
- for (size_t i = 0; i < m; i++)
- mat[i] = new int[n];
- for (size_t i = 0; i < m; i++) {
- for (size_t j = 0; j < n; j++) {
- mat[i][j] = rand() % 100;
- std::cout << mat[i][j] << " ";
- }
- std::cout << std::endl;
- }
- // Выполнение задачи в 1 поток
- std::cout << "\n\tV 1:\n";
- start_time = clock();
- std::thread t1(Max1, std::ref(mat), m, n);
- t1.join();
- end_time = clock();
- std::cout << "\n\tThread work time = " << end_time - start_time << " milliseconds\n\n";
- std::cout << "\n\n";
- // Разбиение на m потоков
- std::cout << "\n\tV 2:";
- std::thread *threads = new std::thread[m];
- int T = 0;
- start_time = clock();
- for (size_t i = 0; i < m; i++)
- threads[i] = std::thread(Max2, mat[i], n, std::ref(T));
- for (size_t i = 0; i < m; i++)
- threads[i].join();
- end_time = clock();
- std::cout << "\n\tMax element = " << T;
- std::cout << "\n\tThread work time = " << end_time - start_time << " milliseconds\n\n";
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement