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

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

02.12.2020, 00:28. Показов 10413. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru