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

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

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

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
У меня есть вопросы относительно лабораторной
Вот постановка задачи:
Создать двумерный массив размерности 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2020, 00:28
Ответы с готовыми решениями:

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

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

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

87
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:39  [ТС]
Студворк — интернет-сервис помощи студентам
Сделал
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
102
103
104
105
106
107
108
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
using namespace std;
 
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;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
    srand(time(NULL));
 
    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);
    });
     
    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;
        
        
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
А как быть со вторым и третьим массивом?
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:41  [ТС]
Да, и тут ошибка
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:50
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
А как быть со вторым и третьим массивом?
У тебя там нужно удалять элементы массива. Т.е. нужно где-то хранить ещё и размер массива

C++
1
2
3
4
5
6
7
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
 
size_t n1 = std::size(randarr1);
size_t n2 = std::size(randarr2);
size_t n3 = std::size(randarr3);
И использовать их вместо константы 5

Добавлено через 58 секунд
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Да, и тут ошибка
Сделай
C++
1
#include <mutex>
Добавлено через 6 минут
C++
1
std::lock_guard<std::mutex> lock(mx);
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 15:50  [ТС]
Есть такое
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
#include <mutex>
 
using namespace std;
 
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;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
    
    size_t n1 = std::size(randarr1);
    size_t n2 = std::size(randarr2);
    size_t n3 = std::size(randarr3);
 
 
    srand(time(NULL));
 
    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);
    });
     
    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;
        
        
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
А ситуация с ошибкой не изменилась
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 15:52
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
А ситуация с ошибкой не изменилась
Выше написал

Добавлено через 36 секунд
C++
1
std::lock_guard<std::mutex> lock(mx);
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:02  [ТС]
Ех, одни ошибки, что тут не так, понять не могу
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
#include <mutex>
 
using namespace std;
 
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard<std::mutex> lock(mx);
 
    std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
 
    std::cout << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
    
    size_t n1 = std::size(randarr1);
    size_t n2 = std::size(randarr2);
    size_t n3 = std::size(randarr3);
 
 
    srand(time(NULL));
 
    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);
    });
     
    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;
        
        
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:05
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Ех, одни ошибки, что тут не так, понять не могу
Потому что у тебя последний стандарт не включен, в свойствах проекта
C++
1
2
3
size_t n1 = 5;
size_t n2 = 5;
size_t n3 = 5;
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:10  [ТС]
Есть теперь работает,
А как теперь поступать здесь со вторым и третьим массивами?
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <ctime>
#include <algorithm>
#include <thread>
#include <chrono>
#include <mutex>
 
using namespace std;
 
static std::mutex mx;
static void print_array(const std::string &name, const int *arr, size_t n)
{
    std::lock_guard<std::mutex> lock(mx);
 
    std::cout << name << ": ";
    for (size_t i = 0; i < n; ++i)
        std::cout << arr[i] << " ";
 
    std::cout << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int randarr1[5]{};
    int randarr2[5]{};
    int randarr3[5]{};
    
    size_t n1 = std::size(randarr1);
    size_t n2 = std::size(randarr2);
    size_t n3 = std::size(randarr3);
 
 
    srand(time(NULL));
 
    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);
    });
     
    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;
        
        
    });
    
    this_thread::sleep_for(chrono::milliseconds(1000));
    
    thread1.join();
    thread2.join();
    thread3.join();
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:11  [ТС]
Сейчас вот так он выводит:
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:15
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
А как теперь поступать здесь со вторым и третьим массивами?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
thread thread1([&]()
{
    for (int i = 0; i < n2; i++)
        randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
 
    print_array("Array #2", randarr2, n2);
    auto it = std::remove_if(randarr2, randarr2 + n2, [](int x)
    {
        return x % 2 != 0;
    });
 
    n2 = it - randarr2;
 
    std::sort(randarr2, randarr2 + n2);
    print_array("Sorted Array #2", randarr2, n2);
});
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:17  [ТС]
Тоже в thread1? Или в thread2?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:20
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Тоже в thread1? Или в thread2?
в thread2
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:34  [ТС]
Спасибо, работает, а как быть с третьим массивом тогда?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:37
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Спасибо, работает, а как быть с третьим массивом тогда?
Третий сделай по-аналогии

Добавлено через 1 минуту
Там найти максимум, потом удалить элементы примерно как во втором
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:41  [ТС]
Что то не получается:
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
    thread thread3([&]()
    {
        for (int i = 0; i < n3; i++)
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
        cout << "\n";
        print_array("Array #3", randarr3, n3);
        
        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;
        
        
    });
Помогите пожалуйста
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:45
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Что то не получается:
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
    thread thread3([&]()
    {
        for (int i = 0; i < n3; i++)
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
        cout << "\n";
        print_array("Array #3", randarr3, n3);
        
        int max = randarr3[0];
        for (int i = 0; i < 5; i++)
        {
            if (randarr3[i] > max)
            {
                max = randarr3[i];
            }
        }
        printf("Максимальный элемент массива #3 = %d\n", max);
 
        auto it = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
        {
            return x < 0.4 * max || x > 0.6 * max;
        });
        
        n3 = it - randarr3;
 
        std::sort(randarr3, randarr3 + n3);
        print_array("Sorted Array #3", randarr3, n3);        
    });
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 16:48  [ТС]
Что то не так с 3-м массивом получилось:
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 16:53
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Что то не так с 3-м массивом получилось:
>>>>
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
for (int i = 0; i < n3; i++)
            randarr2[i] = 1 + rand() % 5; // Генерация массива от 1 до 5
        cout << "\n";
        print_array("Array #3", randarr3, n3);
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 17:11  [ТС]
Фух, все получилось спасибо Вам большое!

Получается, что теперь программа работает параллельно с использованием асинхронных вычислений, верно?

Добавлено через 7 минут
Можете подсказать пожалуйста какую-то литературу по этим потокам, мьютексам, и т.д.

Хотелось бы разобраться во всём этом...
Так как я всего лишь второй курс, а лабораторные нам дают за курс 4-й иногда 5-й...
И что самое обидное, без объяснений, просто сделайте и всё, иначе будет плохо...

Ещё раз, большое Вам спасибо!

И с наступающими праздниками!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 18:17
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Получается, что теперь программа работает параллельно с использованием асинхронных вычислений, верно?
Да, верно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2021, 18:17

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru