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

Правильно ли пользуюсь потоками?

29.05.2022, 09:29. Показов 250. Ответов 2
Метки нет (Все метки)

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
#include <iostream>
#include <iomanip>
#include <pthread.h>
using namespace std;
 
typedef struct arg_t {
    int count{0};
    int array1[120];
    int array2[120];
    int array3[120];
    int array4[120];
    int array5[120];
 
    arg_t () {
        for(int i{0}; i < 120; i++) {
            array1[i] = rand() % 10;
            cout << setw(5) << array1[i];
        }
        cout << endl;
        for(int i{0}; i < 120; i++) {
            array2[i] = rand() % 10;
            cout << setw(5) << array1[i];
        }
        cout << endl;
        for(int i{0}; i < 120; i++) {
            array3[i] = rand() % 10;
            cout << setw(5) << array1[i];
        }
        cout << endl;
        for(int i{0}; i < 120; i++) {
            array4[i] = rand() % 10;
            cout << setw(5) << array1[i];
        }
        cout << endl;
        for(int i{0}; i < 120; i++) {
            array5[i] = rand() % 10;
            cout << setw(5) << array1[i];
        }
    }
 
};
 
void* counter(void* arr) {
    arg_t *arg = (arg_t *) arr;
    for(int k{0}; k < 10; k++) {
        for (int j{}; j < 120; j++) {
            if (arg->array1[j] == k) {
            arg->count++;
            }
        }
        cout << "Kol-vo " << k << ": " << arg->count<< endl;
        arg->count= 0;
 
    }
    return NULL;
}
 
int main(void) {
 
    arg_t a;
    cout << "Array 1" << endl;
    pthread_t p1;
    pthread_create(&p1, NULL, counter, &a);
    pthread_join(p1,NULL);
    cout << "Array 2" << endl;
    pthread_t p2;
    pthread_create(&p2, NULL, counter, &a);
    pthread_join(p2,NULL);
    cout << "Array 3" << endl;
    pthread_t p3;
    pthread_create(&p3, NULL, counter, &a);
    pthread_join(p3,NULL);
    cout << "Array 4" << endl;
    pthread_t p4;
    pthread_create(&p4, NULL, counter, &a);
    pthread_join(p4,NULL);
    cout << "Array 5" << endl;
    pthread_t p5;
    pthread_create(&p5, NULL, counter, &a);
    pthread_join(p5,NULL);
}
По идее, каждый массив обрабатывается в отдельном потоке, для него идет подсчет 1, 2, 3 и т.д. Но у меня есть предположение, что считается только первый массив. Так это или нет? И если считается один массив, то как сделать, чтобы массивы обрабатывались в отдельных потоках
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2022, 09:29
Ответы с готовыми решениями:

Как создать массив и правильно работать с потоками?
Хей. Как правильно создать массив со строками &quot;test1&quot;, &quot;test2&quot;, &quot;test3&quot; ( Гуглил, не смог...

Как правильно работать с сокетами и потоками
Есть сервер и пара клиентов, которые к нему подключаются... Использую потоки, -каждый сокет в своем...

Как правильно работать с потоками?
Есть richTextBox, в который записываются все действия, совершаемые программой. В процессе...

Как правильно работать с потоками в python?
Приветствую, немного пользовался потоками, но не хватает окончательного понимания как с ними...

2
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
29.05.2022, 09:54 2
pthread_create(&p1, NULL, counter, &a);
pthread_join(p1,NULL);
А какой смысл, если вы следом всё равно останавливаете выполнение и ждете окончания потока?

Добавлено через 2 минуты
Цитата Сообщение от Incorrection Посмотреть сообщение
Но у меня есть предположение, что считается только первый массив.
Цитата Сообщение от Incorrection Посмотреть сообщение
if (arg->array1[j] == k)
Вы же используете в counter только array1.
1
0 / 0 / 0
Регистрация: 26.01.2022
Сообщений: 8
29.05.2022, 09:57  [ТС] 3
А как в counter передавать моё желание использовать, например, array2? И как сделать без остановки выполнения?
0
29.05.2022, 09:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2022, 09:57
Помогаю со студенческими работами здесь

Как правильно организовать работу с потоками?
Имеется процесс, который может выполняться длительное время. Он выделен в отдельный класс....

Как правильно переписать код работающий с потоками
Здравствуйте подскажите пожалуйста как правильно переписать код работающий с потоками так чтобы...

Не пользуюсь антивирусними програмами
вот уже год не пользуюсь антивирусними програмами, и если верить результатам програми...

Утечка памяти, пользуюсь vld
Начал разбираться чо это такое, утечка памяти. Как самы простой способ нашел программу Visual Leak...

OCX Controls: пишу в VC++, пользуюсь в Delphi
Здравствуйте, господа Дельфийцы! Этот топик для меня - больное место, т.к. с Delphi я знаком...

Пользуюсь C++ и OpenGL. Сейчас работаю со светом
Хочу сделать программу в которой будет какие-нибудь простые текстурки и источник света, который...

Помогите решить задачу. Пользуюсь pascalABC
Нужно применит Переменная-счетчик


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

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