Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
1

Параллельное программирование на С++

02.12.2020, 00:28. Показов 7773. Ответов 87
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
У меня есть вопросы относительно лабораторной
Вот постановка задачи:
Создать двумерный массив размерности n×m. Найти сумму элементов массива.
Но с использованием параллелизма, параллельного программирования,
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <thread> 
#include <chrono> 
 
using namespace std;
 
int n,m,**a;
int sum = 0;
 
void get_Matrix()
{   
    cout << "Введите размерность матрицы (n x m) : " << endl;
        cin >> n >> m;
        cout << "Введите матрицу : "<< endl;
        a = new int *[n];
        for(int i = 0; i < n; i++)
        {
            a[i] = new int[n];
            for(int j = 0; j < m; j++)
            {
                cout << "[" << i+1 << "]["<< j+1 << "] : ";
                cin >> a[i][j];
            }
        }
        cout << "\n";
        //this_thread::sleep_for(chrono::milliseconds(2000));
        cout << "Ваша матрица А : " << endl;
        for(int i = 0; i < n; i++)
        {
            cout << "\n";
            for(int j = 0; j < m; j++)
            {
                cout << "\t";
                cout << a[i][j];
            }
        }
        
        cout << "\n";
        
}
 
 
 
void get_Sum()
    {
        cout << "Сумма элементов в матрице А : " << endl;
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                sum += a[i][j]; 
            }
        }
        cout << sum << endl;    
    }
    
 
int main()
{
    setlocale(LC_ALL, "rus");
    system("color 0B");
    
 
    
    thread th1(get_Matrix); 
    th1.join(); 
    
 
    this_thread::sleep_for(chrono::milliseconds(2000));
    
 
    thread th2(get_Sum);        
    th2.join(); 
    
    
    
    return 0;
}
Я использовал thread, программа работает, все считает, но мне сказали, что эта программа она не использует параллелизм, а просто работает последовательно...

Буду очень всем Вам благодарен за совет, относительно того, как можно подкорректировать мой код, чтобы программа все же работала параллельно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2020, 00:28
Ответы с готовыми решениями:

Параллельное программирование
Подскажите учебник с помощью которого можно научиться параллельному программированию

Параллельное программирование на C++
Вот например происходит какое то действие, это действие длится 5 минут. И вот я запускаю это...

Параллельное программирование
Всем доброго времени суток! Не нашла на сайте ни одной темы с параллельным программированием....

Параллельное программирование
Есть задача, которая хорошо распараллеливается. Ее текущий вариант выполняется неприлично долго:...

87
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:32  [ТС] 41
Author24 — интернет-сервис помощи студентам
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <ctime>
#include <future>
#include <thread>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");   
    int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
    
    srand(time(NULL));
 
    std::thread thread1([&]()
    {
        for(int i=0; i < 5; i++)
            randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
    });
/*  
    cout << "Случайный массив 1:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr1[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 2:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr2[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 3:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr3[i];
    }
    cout<<"\n" << endl;
*/  
    std::thread thread2([&]()
    {
        for(int i=0; i < 5; i++)
            randarr2[i] = 1 + rand()%5;
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    });
    cout << "\n";
    std::thread thread3([&]()
    {
        for(int i=0; i < 5; i++)
            randarr3[i] = 1 + rand()%5;
      printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
       int max = randarr3[0];
        for(int i = 0; i < 5; i++)
        {                   
            if (randarr3[i] > max) 
            {
                max = randarr3[i];        
              
            }
        }
        printf("Максимальный элемент массива = ", max);
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
            cout << *p << " ";
           cout  <<endl;      
 
    });
    
    thread1.join();
    thread2.join();
    thread3.join();  
    
    /* Осталось сделать:
      2) Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      3) Реализовать параллельный алгоритм с использованием механизмов асинхронных вычислений.
    */
    
    return 0;
}
Он работает, но как-то криво(
Мне нужно, чтобы видно было какие массивы сгенерировались, и какие операции над ними проводились
Миниатюры
Параллельное программирование на С++  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:32 42
И - не нужно распечатывать массивы в потоках, распечатывай их после завершения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
size_t n3 = 0;
std::thread thread3([&]()
{
    printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
    for(int i=0; i < 5; i++)
        randarr3[i] = 1 + rand()%5; // Генерация массива от 1 до 5
 
    int max = randarr3[0];
    for(int i = 0; i < 5; i++)
        if (randarr3[i] > max) 
            max = randarr3[i];        
 
    auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
    {
        return x < 0.4 * max || x > 0.6 * max;
    });
 
    n3 = end - randarr3;
});
 
thread1.join();
thread2.join();
thread3.join();
.............
for (size_t i = 0; i < n3; ++i)
    std::cout << randarr3[i] << " ";
std::cout << std::endl;
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:33  [ТС] 43
Аа, мы не выводим на экран массивы...
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:36 44
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Аа, мы не выводим на экран массивы...
Экран у тебя один. Соответственно, если ты в нескольких потоках что-то печатаешь без синхронизации, то всё перемешается.
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:41  [ТС] 45
Можно Вас попросить подкорректировать наш код?
Я что то запутался в этих потоках и синхронизации

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <ctime>
#include <future>
#include <thread>
#include <algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");   
    int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
    
    srand(time(NULL));
 
    std::thread thread1([&]()
    {
        for(int i=0; i < 5; i++)
            randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
    });
/*  
    cout << "Случайный массив 1:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr1[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 2:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr2[i];
    }
    cout<<"\n";
    
    cout << "Случайный массив 3:" << endl;
    for(int i = 0; i < 5; i++)
    {
        cout <<" "<<randarr3[i];
    }
    cout<<"\n" << endl;
*/  
    std::thread thread2([&]()
    {
        for(int i=0; i < 5; i++)
            randarr2[i] = 1 + rand()%5;
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    });
    cout << "\n";
    std::thread thread3([&]()
    {
        for(int i=0; i < 5; i++)
            randarr3[i] = 1 + rand()%5;
      printf("Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
       int max = randarr3[0];
        for(int i = 0; i < 5; i++)
        {                   
            if (randarr3[i] > max) 
            {
                max = randarr3[i];        
              
            }
        }
        printf("Максимальный элемент массива = ", max);
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
            cout << *p << " ";
           cout  <<endl;      
 
    });
    
    thread1.join();
    thread2.join();
    thread3.join();  
    
    /* Осталось сделать:
      2) Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      3) Реализовать параллельный алгоритм с использованием механизмов асинхронных вычислений.
    */
    
    return 0;
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:47 46
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Можно Вас попросить подкорректировать наш код?
thread3 и randarr3 я тебе вроде показал

Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Я что то запутался в этих потоках и синхронизации
Здесь нет никакой особой синхронизации, только самая примитивная работа с потоками.
Отдохни, завтра доделаешь всё примерно за полчаса.
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:50  [ТС] 47
Хорошо, большое спасибо!
Если вдруг возникнут вопросы, можно Вам написать?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 01:00 48
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Если вдруг возникнут вопросы, можно Вам написать?
Пиши лучше здесь. Я точно так же отвечу.
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:40  [ТС] 49
Здравствуйте! Спасибо Вам большое. Код работает)
Вот он:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
    srand(time(NULL));
 
    thread thread1([&]()
    {
        cout << "Случайный массив 1: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout <<" "<< randarr1[i];
        }
        cout << "\n";
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
        {
        
            int multiplication = 2*randarr1[i];
            cout<<" "<<multiplication;
        }
    });
    this_thread::sleep_for(chrono::milliseconds(1000));
    cout << "\n";
    thread thread2([&]()
    {
        cout << "Случайный массив 2: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr2[i];
        }
        cout << "\n";
        printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for (int i = 0; i < 5; i++)
        {
            if (randarr2[i] % 2 == 0)
            {
                cout << " " << randarr2[i];
            }
        }
        cout << "\n";
    });
    cout << "\n";
    this_thread::sleep_for(chrono::milliseconds(1000));
    thread thread3([&]()
    {
        cout << "Случайный массив 3: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr3[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr3[i];
        }
        cout << "\n";
        printf("Операция над третьим массивом - (Оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
        
        int max = randarr3[0];
        for (int i = 0; i < 5; i++)
        {
            if (randarr3[i] > max)
            {
                max = randarr3[i];
            }
        }
        cout <<"Максимальный элемент массива =  " << max;
 
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
Вот его выполнение:


Осталось только провести сортировку массивов,
Тут так интересно сформулирована условие сортировки:

Отсортировать массивы и слить в один массив элементы отсортированный массив в котором есть элементы которые входят во второй и третий массив и не входят в первый.

Получается, нужно отсортировать уже массивы с которыми были совершены операции, и использовать элементы дискретной математики:
randarr2[i] union (объединить с randarr3[i]) difference randarr1[i].

т.е. Если брать данные массивы с скриншота у меня есть:
1-й выходной массив : 10, 8, 2, 10, 6
2-й выходной массив : 2, 2, 2
3-й выходной массив : 2, 2.

Проводим операцию: {2, 2, 2}union {2, 2} difference {10, 8, 2, 10, 6} = 2.
Получается, что будет только один элемент в массиве, и он равен 2,

Верно?
Миниатюры
Параллельное программирование на С++  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:45 50
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Получается, нужно отсортировать уже массивы с которыми были совершены операции, и использовать элементы дискретной математики:
randarr2[i] union (объединить с randarr3[i]) difference randarr1[i].
Сортировку сделай в потоках. В конце каждого
C++
1
2
3
4
5
6
thread thread1([&]()
{
...............................
 
    std::sort(randarr1, randarr1 + 5);
});
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
 
 
std::sort(randarr3, end);
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:50  [ТС] 51
Вот исправил, но что то он не от сортировался(

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
    srand(time(NULL));
 
    thread thread1([&]()
    {
        cout << "Случайный массив 1: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout <<" "<< randarr1[i];
        }
        cout << "\n";
        printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
        for(int i = 0; i < 5; i++)
        {
        
            int multiplication = 2*randarr1[i];
            cout<<" "<<multiplication;
        }
        std::sort(randarr1, randarr1 + 5);
    });
    this_thread::sleep_for(chrono::milliseconds(1000));
    cout << "\n";
    thread thread2([&]()
    {
        cout << "Случайный массив 2: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr2[i];
        }
        cout << "\n";
        printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for (int i = 0; i < 5; i++)
        {
            if (randarr2[i] % 2 == 0)
            {
                cout << " " << randarr2[i];
            }
        }
        cout << "\n";
        std::sort(randarr2, randarr2 + 5);
    });
    cout << "\n";
    this_thread::sleep_for(chrono::milliseconds(1000));
    thread thread3([&]()
    {
        cout << "Случайный массив 3: " << endl;
        for (int i = 0; i < 5; i++)
        {
            randarr3[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
            cout << " " << randarr3[i];
        }
        cout << "\n";
        printf("Операция над третьим массивом - (Оставить элементы в диапазоне от 0.4 до 0.6 максимального значения): \n");
        
        int max = randarr3[0];
        for (int i = 0; i < 5; i++)
        {
            if (randarr3[i] > max)
            {
                max = randarr3[i];
            }
        }
        cout <<"Максимальный элемент массива =  " << max;
 
        auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        cout << "\nЭлементы, которые остались: ";
        for (auto *p = randarr3; p != end; ++p)
        {
            cout << *p << " ";
        }
        cout << endl;
        
        [B]std::sort(randarr3, end);[/B]
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
Миниатюры
Параллельное программирование на С++  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:52 52
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Вот исправил, но что то он не от сортировался(
Потому что ты его печатаешь до сортировки. Убери вообще вывод массивов на экран из потоков. Сделай его после join-ов
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 14:55  [ТС] 53
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Потому что ты его печатаешь до сортировки. Убери вообще вывод массивов на экран из потоков. Сделай его после join-ов
Тогда он как-то работает коряво
непонятно что к чему...
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 14:57 54
C++
1
2
3
4
5
6
7
8
9
10
    thread thread1([&]()
    {
        for (int i = 0; i < 5; i++)
            randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
 
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
 
        std::sort(randarr1, randarr1 + 5);
    });
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:07  [ТС] 55
Я ж говорил что будет коряво...
Миниатюры
Параллельное программирование на С++  
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:07  [ТС] 56
Как тогда провести сортировку?
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:10  [ТС] 57
Мне нужно, чтобы было вот так,
И внизу ещё была видна сортировка
Миниатюры
Параллельное программирование на С++  
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:17 58
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Я ж говорил что будет коряво...
У тебя неправильно сделано второе задание

Добавлено через 3 минуты
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Мне нужно, чтобы было вот так,
И внизу ещё была видна сортировка
Для начала сделай функцию вывода массива на экран
C++
1
2
3
4
5
6
7
8
9
10
11
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard lock(mx);
 
    std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
 
    std::cout << std::endl;
}
Добавлено через 1 минуту
Тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
thread thread1([&]()
{
    for (int i = 0; i < 5; i++)
        randarr1[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
 
    print_array("Array #1", randarr1, 5);
    for(int i = 0; i < 5; i++)
        randarr1[i] *= 2;
 
    std::sort(randarr1, randarr1 + 5);
    print_array("Sorted Array #1", randarr1, 5);
});
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:20  [ТС] 59
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard lock(mx);
std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
std::cout << std::endl;
}
И куда мне это приписать?

Добавлено через 28 секунд
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
У тебя неправильно сделано второе задание
Почему? Видь он находит парные элементы
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:21 60
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Почему? Видь он находит парные элементы
Тебе нужно не находить их, а удалить из массива все другие элементы

Добавлено через 20 секунд
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
И куда мне это приписать?
Выше main
0
12.01.2021, 15:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2021, 15:21
Помогаю со студенческими работами здесь

параллельное программирование
Клиент серверное приложение. Суть - в реализации обычного чата. Оба устройства коннекятся через...

Параллельное программирование
На языке С/С++ стандартными средствами используемой системы программирования написать параллельное...

Параллельное программирование в С++
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна...

Параллельное программирование
Как составить параллельную программу вычисления среднего арифметического элементов вектора?

Параллельное программирование
Подскажите, пожалуйста, как в PUTTY начать редактировать файл?

параллельное программирование
Подскажите, пожалуйста! Возвожу положительные числа в степень, а выдается отрицательный результат....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru