Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
18 / 15 / 3
Регистрация: 29.01.2018
Сообщений: 69

Многопоточность. Обращение к переменным с которыми работает поток

25.07.2022, 15:25. Показов 1888. Ответов 2

Студворк — интернет-сервис помощи студентам
Требуется создать динамическую библиотеку, которая будет обладать следующим функционалом: внутри в бесконечном цикле выполняется некоторые вычислительные операции, по завершению каждого витка бесконечного цикла можно получить результаты вычислений. Вызывающая библиотеку программа может в любой момент времени вызвать просмотр этих промежуточных результатов, и при этом быть уверенной, что прошло целое число вычислений (витков цикла), то есть значения переменных не взяты где-то на середине вычисления.
Подскажите, как организовать подобные вычисления?
Сначала я подумал, что цикл вычислений должен выполняться в отдельном треде, попытался реализовать с помощью std::thread пока без dll , но из-за отсутствия опыта работы с потоками застрял.
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
#include <iostream>
#include <Windows.h>
#include <thread>
#include <mutex>
#include <string>
 
int a = 0;
int res;
bool status = false;
 
void Add()//мини-аналог метода, производящего вычисления
{
    while (1)
    {
        a++;
        if (status) res = a;
    }
}
 
void print()
{
    int key;
    while (1)
    {
        std::cout << "key = " << std::endl;
        std::cin >> key;
        if (key == 1) 
        {
            status = true;
            std::cout << "a = " << res << std::endl;
        }
    }
}
 
int main()
{
    a = 0;
    std::thread t1(Add);
    Add();
    t1.detach();
    //std::thread t2(print);
    print();
    //t2.join();
    system("pause");
}
Миниатюры
Многопоточность. Обращение к переменным с которыми работает поток  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.07.2022, 15:25
Ответы с готовыми решениями:

Что работает быстрее, функции-сеттеры и -геттеры или прямое обращение к переменным?
Грамотнее использовать функции-геттеры и -сеттеры, но работает ли это так же по скорости, как прямое обращение к переменной? Вроде бы...

Как правильно организовать многопоточность и доступ к общим переменным
Вот пример класса который должен в многопоточном режиме перебирать набор данных (в данном случае очередь (Queue)) и выполнять с элементами...

Обращение к переменным this
Всем доброго времени суток. Я изучаю php , но изучаю его сразу по готовому коду. Плскажите вот что. В классе есть переменная private...

2
фрилансер
 Аватар для Алексей1153
6466 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,128
25.07.2022, 17:00
IlyaOE, вот тут один поток складывает значения в вектор, другой их вытаскивает и распечатывает

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
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
#include <chrono>
#include <optional>
 
std::mutex global_mutex;
std::vector<int> global_result_list;
std::atomic<bool> global_stop{};
 
void Add()//мини-аналог метода, производящего вычисления
{
    using namespace std::chrono_literals;
    while(!global_stop)
    {
        std::this_thread::sleep_for(100ms);
 
        std::lock_guard lg{global_mutex};
        if(global_result_list.size()<10)
        {
            global_result_list.push_back(std::rand());
        }
    }
}
 
void print()
{
    while(!global_stop)
    {
        std::optional<int> item{};
 
        {
            std::lock_guard lg{global_mutex};
            if(global_result_list.size())
            {
                item=global_result_list.at(0);
                global_result_list.erase(global_result_list.begin());
            }
        }
 
        if(item)
        {
            std::cout << "item = " << *item << std::endl;
        }
    }
}
 
int main()
{
    using namespace std::chrono_literals;
    
    std::thread t1(Add);
    std::thread t2(print);
 
    std::this_thread::sleep_for(2s);
    global_stop=true;
    
    t1.join();
    t2.join();
}
1
фрилансер
 Аватар для Алексей1153
6466 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,128
26.07.2022, 00:38
там у меня заголовок пропущен, если что

C++
1
#include <atomic>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.07.2022, 00:38
Помогаю со студенческими работами здесь

Обращение к переменным
Пытаюсь разобраться в visual studio 2010. Возникла проблема связи между 2 формами. В программе есть 2 формы, мне нужно значение...

многопоточность - не создается поток
Имеем: codeBlocks, gcc 11-1-0, код(смотри ниже.) Код: #include &lt;iostream&gt; #include &lt;thread&gt; using namespace std; void...

Инициализация и обращение к переменным
Доброго времени. Возникли некоторые вопросы связанные с порядком инициализации. Ниже привожу код, где в коментариях содержатся...

Обращение к переменным по счётчику
Всем привет! Помогите решить задачу) Необходимо в цикле обращатся к переменной используя счётчик. например: for (int i = 0; i &lt;=...

Обращение к переменным в цикле
Доброго времени суток. Есть массив данных, с именами Х0adc ... X1000adc. Каждая перменная - вектор, содержащий в себе сигнал. Имеется...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru