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

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

02.12.2020, 00:28. Показов 10033. Ответов 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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
10.01.2021, 21:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
1) о третьем массиве, получается, что нужно посчитать диапазон [0.4 .. 0.6] от максимального числа?
Найти максимальный элемент X в массиве. Потом удалить элементы, которые меньше 0.4 * X и больше 0.6 * X

Цитата Сообщение от uzer_srm34 Посмотреть сообщение
2) требуется реализовать параллельный алгоритм с использованием механизмов асинхронных вычислений.
Запускаешь три потока, которые будут формировать-сортировать три твоих массива. Потом ждёшь, когда потоки завершатся и сливаешь эти три массива в новый массив, как по-заданию.
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
10.01.2021, 22:35  [ТС]
Вот я доделал, можете посмотреть пожалуйста правильно ли?
Потому что мне кажется, что что-то тут не так...

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
#include <iostream>
#include <ctime>
#include <future>
#include <thread>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");   
    int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
    
    srand(time(NULL));
    for(int i=0; i < 5; i++)
    {
        randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
        randarr2[i] = 1 + rand()%5;
        randarr3[i] = 1 + rand()%5;
        
    }
    
    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;
    
    cout << "Операция с первым массивом - (элементы массива умножить на 2):" << endl;
    for(int i = 0; i < 5; i++)
    {
        //std::future<int> fut = std::async (main); 
        
        int multiplication = 2*randarr1[i];
        cout<<" "<<multiplication;
    }
    cout<<"\n";
    cout << "Операция со вторым массивом - (оставить только парные элементы):"<< endl;
    for(int i = 0; i < 5; i++)
    {
        if(randarr2[i]%2 == 0)
        {
            cout <<" "<<randarr2[i];
        }
    
    }
    cout << "\n";
    cout << "Операция над третьим массивом - (оставить элементы в диапазоне от 0.4 до 0.6 максимального значения):"<< endl;
    
    int max = randarr3[0];
    for(int i = 0; i < 5; i++)
    {                   
        for(i = 0; i < 5; i++)
            if (randarr3[i] > max) 
            {
              max = randarr3[i];          
              
            }
    }
    cout << "Максимальный элемент массива = " << max;
    for(int i = 0; i < 5; i++)
    {
        if(randarr3[i] < 0.4*max || randarr3[i] > 0.6*max)
        {
            randarr3[i] = randarr3[i + 1];
            cout  << " " <<randarr3[i];
        }
 
    }
    
    return 0;
}
Потоки я пока что не делал ещё

Добавлено через 3 минуты
if(randarr3[i] < 0.4*max || randarr3[i] > 0.6*max)
Если я в этом условии вместо ИЛИ поставлю И, то никакие элементы не выводятся...(

Добавлено через 5 минут
В поиске максимального элемента, я ошибочно сделал сложность O(n^2), я переправил на O(n)...
Максимальный элемент находит верно, а вот с условием что-то походу не так(
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.01.2021, 23:01
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
if(randarr3[i] < 0.4*max || randarr3[i] > 0.6*max)
Если я в этом условии вместо ИЛИ поставлю И, то никакие элементы не выводятся...(
Условие правильное, а удаление элемента сделано неправильно

Добавлено через 3 минуты
std::remove_if

Добавлено через 22 минуты
C++
1
2
3
4
5
6
7
8
9
cout << "Максимальный элемент массива = " << max;
auto end = std::remove_if(randarr3, randarr3 + 5, [&](auto x)
{
    return x < 0.4 * max || x > 0.6 * max;
});
 
for (auto *p = randarr3; p != end; ++p)
    cout << *p << " ";
std::cout << std::endl;
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
11.01.2021, 23:23  [ТС]
Большое спасибо! Работает.
А как быть с асинхронным вычислением?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.01.2021, 23:27
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Большое спасибо! Работает.
А как быть с асинхронным вычислением?
Потоки запускать умеешь, std::thread?

Добавлено через 1 минуту
Нужно запустить три потока. В первый поместить весь код, который работает с randarr1, во второй - весь код с randarr2, в третий - randarr3

Добавлено через 46 секунд
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
int randarr1[5] {};
    int randarr2[5] {};
    int randarr3[5] {};
Это оставить как есть
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
11.01.2021, 23:27  [ТС]
Запускал, но преподаватель сказал, что программа работает не параллельно а последовательно...
И теперь я запутался как их правильно запускать(
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.01.2021, 23:28
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Запускал, но преподаватель сказал, что программа работает не параллельно а последовательно...
И теперь я запутался как их правильно запускать(
А как ты из запускал?
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
11.01.2021, 23:31  [ТС]
Я запускал на примере другой задачи, как-то так:
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;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.01.2021, 23:36
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Я запускал на примере другой задачи, как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
get_Matrix();
 
   thread th1(get_Sum1); 
    thread th2(get_Sum2);        
    
 
    this_thread::sleep_for(chrono::milliseconds(2000));
    
 
    th1.join(); 
    th2.join();
Добавлено через 38 секунд
get_Matrix читает массив с клавиатуры, он не должен запускаться параллельно

Добавлено через 1 минуту
И - у тебя вроде три независимых массива и с клавиатуры ничего не начитывается. Поэтому их все можно запустить каждый в своём потоке
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
11.01.2021, 23:38  [ТС]
Ага, а если брать мою задачу, то мне нужно похожим методом сделать, только для трёх массивов, будет три потока и каждый поток должен ждать свое выполнение join()?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
11.01.2021, 23:50
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Ага, а если брать мою задачу, то мне нужно похожим методом сделать, только для трёх массивов, будет три потока и каждый поток должен ждать свое выполнение join()?
Сначала запускаешь три потока подряд, потом, делаешь им join

Добавлено через 8 минут
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
    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
        //cout << "Операция с первым массивом - (элементы массива умножить на 2):" << endl;
        for(int i = 0; i < 5; i++)
            randarr1[i] *= 2;
    };
 
    std::thread thread2([&]() /// randarr2
    ..........................
        
        
    std::thread thread3([&]() /// randarr3
    .................
 
    thread1.join();
    thread2.join();
    thread3.join();
Добавлено через 2 минуты
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
cout << "Операция с первым массивом - (элементы массива умножить на 2):" << endl;
std::cout << .... в потоках нужно синхронизировать, поэтому лучше воспользоваться printf
C++
1
printf("Операция с первым массивом - (элементы массива умножить на 2): \n");
1
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:02  [ТС]
Компилятор выдает ошибки(
Миниатюры
Параллельное программирование на С++  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:04
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Компилятор выдает ошибки(
Я там подправил

Добавлено через 22 секунды
std::thread thread1([&]()
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:10  [ТС]
Теперь другая ошибка появилась
Миниатюры
Параллельное программирование на С++  
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:11  [ТС]
Вот весь мой код:
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
#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([&]()
    {
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    };
    cout << "\n";
    std::thread thread3([&]()
    {
      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;      
 
    };
    
       
    
    /* Осталось сделать:
      Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      
    */
    
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:14
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Теперь другая ошибка появилась
Покажи, как сделал

Добавлено через 46 секунд
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Вот весь мой код:
Скобку не закрываешь

std::thread thread1([&]()
{
...............
});
Добавлено через 1 минуту
В остальных то же самое
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:14  [ТС]
Забыл в конце ожидание потоков поставить
Вот код
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 <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([&]()
    {
       printf("Операция со вторым массивом - (оставить только парные элементы): \n");
        for(int i = 0; i < 5; i++)
        {
            if(randarr2[i]%2 == 0)
            {
                cout << " " << randarr2[i]; 
            }
    
        }   
        
    };
    cout << "\n";
    std::thread thread3([&]()
    {
      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();  
    
    /* Осталось сделать:
      Отсортировать массивы и слить в один массив элементы. отсортированный массив в 
         котором есть элементы которые входят во второй и третий массив и не входят в первый;
      
    */
    
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:16
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
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;
Это делать бесполезно, массивы заполняются в параллельных потоках

Добавлено через 44 секунды
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
for(int i=0; i < 5; i++)
            randarr1[i] = 1 + rand()%5; // Генерация массива от 1 до 5
А где то же самое для других массивов?
0
0 / 0 / 0
Регистрация: 14.03.2018
Сообщений: 120
12.01.2021, 00:19  [ТС]
Выходит мне в поток нужно закинуть как и генерацию массива, так и операцию над ним?
Или только генерацию массива, а операцию над ним выполнять без потока?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.01.2021, 00:27
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
Выходит мне в поток нужно закинуть как и генерацию массива, так и операцию над ним?
Ну да, я ж тебе показал. В остальных потоках сделай по-аналогии.

Добавлено через 5 минут
Цитата Сообщение от uzer_srm34 Посмотреть сообщение
printf("Операция со вторым массивом - (оставить только парные элементы): \n");
Это сделано явно неправильно. Если нужно оставить только чётные элементы, нужно воспользоваться std::remove_if
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2021, 00:27

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
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-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru