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

Потоки и очередь заданий

18.06.2024, 15:12. Показов 2970. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, врать не буду, скажу это сразу, но C++ я практически не знаю, я больше по C# .NET. Но мне нужно сдать практическое задание по плюсам для того, чтобы закрыть учебную практику, прошу Вас помочь мне с данным заданием. Заранее спасибо!)

Задание

Используя С++, (по желанию Win32 API) и STL корректно реализовать следующую задачу:

Откуда-то дано:


C++
1
2
3
4
5
6
7
8
9
10
11
12
class Request
      {
      };
 
      // возвращает nullptr если нужно завершить процесс, либо указатель на память,
      // которую в дальнейшем требуется удалить
      Request* GetRequest() throw(); 
 
      // обрабатывает запрос, но память не удаляет
      void ProcessRequest(Request* request) throw();
 
    const int NumberOfThreads = 2;
Основной поток должен:
1) Запустить несколько рабочих потоков (NumberOfThreads).
2) Класть в одну очередь заданий задачи до тех пор, пока GetRequest() не вернёт nullptr.
3) Корректно остановить рабочие потоки. Они должны доделать текущий ProcessRequest, если он имеется, и остановиться. Если имеются необработанные задания, не обращать на них внимания.
4) Завершить программу.


Рабочий поток должен:

1) Обрабатывать поступающие через очередь запросы с помощью ProcessRequest.
2) Завершиться, как только основной поток ему это скомандует.

Вызовы GetRequest() и ProcessRequest() могут работать долго.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2024, 15:12
Ответы с готовыми решениями:

Потоки.Работа с файломи.Очередь.Стек.
Полностью рабочий код с очередью.#include <stdlib.h> #include <stdio.h> #include <windows.h> #include <conio.h> #include...

Очередь зависимых заданий
Возможно это уже тема уже выходит за рамки C# для начинающих, но все же задам его здесь. Допустим есть игра, в которой есть куча...

Планировщик заданий ставит задачи в очередь
Добрый день Есть 2 сервера. Все задачи падают в очередь. Один я перезалил. Проблема ушла. Другой нет возможности. Проверка...

3
фрилансер
 Аватар для Алексей1153
6466 / 5683 / 1131
Регистрация: 11.10.2019
Сообщений: 15,128
18.06.2024, 18:01
Winriks, например, так

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
#include <iostream>
#include <thread>
#include <memory>
#include <mutex>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
#include <ctime>
 
constexpr int NumberOfThreads = 2;
 
class Request
{
    public:
    size_t index{};
};
 
std::mutex list_mutex;
std::vector<std::unique_ptr<Request>> list;
 
// возвращает nullptr если нужно завершить процесс
std::unique_ptr<Request> GetRequest() noexcept
{
    std::unique_ptr<Request> ptr;
    
    std::scoped_lock(list_mutex);
    if(list.size())
    {
        ptr=std::move(list.front());
        list.erase(list.begin());
    }
    
    return ptr;
}
 
// обрабатывает запрос, но память не удаляет
void ProcessRequest(Request* request) noexcept
{
    double acc{};
    for(int i=0; i<10000; acc+=rand(),i++);
    std::ostringstream oss;
    oss<<"task #"<<std::setw(2)<<request->index<<" processed by "<<std::this_thread::get_id()<<" result="<<acc<<"\n";
    std::cout<<oss.str();
}
 
int main()
{
    srand(time({}));
    
    std::vector<std::thread> trds;
    
    for(size_t i=0; i<100; i++)list.emplace_back(new Request{i});
    
    for(int i=0; i<NumberOfThreads; i++)
    {
        trds.push_back(std::thread([]
        {
            while(auto ptr=GetRequest())ProcessRequest(ptr.get());
        }));
    }
    
    for(auto& i:trds)i.join();
}
Кликните здесь для просмотра всего текста
task # 0 processed by 140111150368320 result=1.07572e+13
task # 1 processed by 140111150368320 result=1.07902e+13
task # 2 processed by 140111150368320 result=1.06653e+13
task # 3 processed by 140111150368320 result=1.06904e+13
task # 4 processed by 140111150368320 result=1.07094e+13
task # 5 processed by 140111150368320 result=1.07427e+13
task # 6 processed by 140111150368320 result=1.07805e+13
task # 7 processed by 140111150368320 result=1.08266e+13
task # 8 processed by 140111150368320 result=1.07662e+13
task # 9 processed by 140111158761024 result=1.06901e+13
task #10 processed by 140111150368320 result=1.07369e+13
task #11 processed by 140111158761024 result=1.0718e+13
task #12 processed by 140111150368320 result=1.07107e+13
task #13 processed by 140111158761024 result=1.07461e+13
task #14 processed by 140111150368320 result=1.0716e+13
task #15 processed by 140111158761024 result=1.06315e+13
task #16 processed by 140111150368320 result=1.06818e+13
task #17 processed by 140111158761024 result=1.08432e+13
task #18 processed by 140111150368320 result=1.08131e+13
task #19 processed by 140111158761024 result=1.0716e+13
task #21 processed by 140111158761024 result=1.07577e+13
task #22 processed by 140111158761024 result=1.06896e+13
task #23 processed by 140111158761024 result=1.06855e+13
task #24 processed by 140111158761024 result=1.07993e+13
task #20 processed by 140111150368320 result=1.07713e+13
task #25 processed by 140111158761024 result=1.07517e+13
task #26 processed by 140111150368320 result=1.07673e+13
task #27 processed by 140111158761024 result=1.0524e+13
task #28 processed by 140111150368320 result=1.0788e+13
task #29 processed by 140111158761024 result=1.06575e+13
task #30 processed by 140111150368320 result=1.07202e+13
task #31 processed by 140111158761024 result=1.05961e+13
task #32 processed by 140111150368320 result=1.07491e+13
task #33 processed by 140111158761024 result=1.07618e+13
task #34 processed by 140111150368320 result=1.08065e+13
task #35 processed by 140111158761024 result=1.07469e+13
task #36 processed by 140111150368320 result=1.07495e+13
task #37 processed by 140111158761024 result=1.07778e+13
task #38 processed by 140111150368320 result=1.06943e+13
task #40 processed by 140111150368320 result=1.0871e+13
task #39 processed by 140111158761024 result=1.06995e+13
task #41 processed by 140111150368320 result=1.07798e+13
task #42 processed by 140111158761024 result=1.07457e+13
task #43 processed by 140111150368320 result=1.06812e+13
task #44 processed by 140111158761024 result=1.07175e+13
task #45 processed by 140111150368320 result=1.07808e+13
task #47 processed by 140111150368320 result=1.07096e+13
task #46 processed by 140111158761024 result=1.06584e+13
task #48 processed by 140111150368320 result=1.06832e+13
task #49 processed by 140111158761024 result=1.07905e+13
task #50 processed by 140111150368320 result=1.0706e+13
task #51 processed by 140111158761024 result=1.07005e+13
task #52 processed by 140111150368320 result=1.06933e+13
task #53 processed by 140111158761024 result=1.06572e+13
task #54 processed by 140111150368320 result=1.06835e+13
task #55 processed by 140111158761024 result=1.06212e+13
task #56 processed by 140111150368320 result=1.0772e+13
task #57 processed by 140111158761024 result=1.08223e+13
task #58 processed by 140111150368320 result=1.07118e+13
task #59 processed by 140111158761024 result=1.07086e+13
task #61 processed by 140111158761024 result=1.08262e+13
task #60 processed by 140111150368320 result=1.06936e+13
task #62 processed by 140111158761024 result=1.06251e+13
task #64 processed by 140111158761024 result=1.0714e+13
task #63 processed by 140111150368320 result=1.07445e+13
task #65 processed by 140111158761024 result=1.06877e+13
task #66 processed by 140111150368320 result=1.07083e+13
task #67 processed by 140111158761024 result=1.0663e+13
task #68 processed by 140111150368320 result=1.07321e+13
task #69 processed by 140111158761024 result=1.06797e+13
task #70 processed by 140111150368320 result=1.07038e+13
task #71 processed by 140111158761024 result=1.0942e+13
task #72 processed by 140111150368320 result=1.08043e+13
task #73 processed by 140111158761024 result=1.07423e+13
task #74 processed by 140111150368320 result=1.06861e+13
task #75 processed by 140111158761024 result=1.07568e+13
task #76 processed by 140111150368320 result=1.07302e+13
task #77 processed by 140111158761024 result=1.06537e+13
task #78 processed by 140111150368320 result=1.06877e+13
task #79 processed by 140111158761024 result=1.06705e+13
task #81 processed by 140111158761024 result=1.07794e+13
task #80 processed by 140111150368320 result=1.0826e+13
task #83 processed by 140111150368320 result=1.07148e+13
task #82 processed by 140111158761024 result=1.07018e+13
task #84 processed by 140111150368320 result=1.07667e+13
task #85 processed by 140111158761024 result=1.06687e+13
task #86 processed by 140111150368320 result=1.08184e+13
task #88 processed by 140111150368320 result=1.07416e+13
task #89 processed by 140111150368320 result=1.07703e+13
task #90 processed by 140111150368320 result=1.07348e+13
task #91 processed by 140111150368320 result=1.06984e+13
task #92 processed by 140111150368320 result=1.07399e+13
task #93 processed by 140111150368320 result=1.06546e+13
task #94 processed by 140111150368320 result=1.08675e+13
task #95 processed by 140111150368320 result=1.0702e+13
task #96 processed by 140111150368320 result=1.06727e+13
task #97 processed by 140111150368320 result=1.07145e+13
task #98 processed by 140111150368320 result=1.06343e+13
task #99 processed by 140111150368320 result=1.07778e+13
task #87 processed by 140111158761024 result=1.07592e+13
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.06.2024, 18:15
Алексей1153, ты не понял, класс Request уже задан :
Цитата Сообщение от Winriks Посмотреть сообщение
Откуда-то дано:
Так же как и даны функции.
Только не описано что такое задача и всё остальное.
Если вам этого достаточно, тогда вам выше мидла не т пути.
0
фрилансер
 Аватар для Алексей1153
6466 / 5683 / 1131
Регистрация: 11.10.2019
Сообщений: 15,128
18.06.2024, 18:32
SmallEvil, да на здоровье
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2024, 18:32
Помогаю со студенческими работами здесь

Очередь с приоитетом и чтение заданий из файла
Задание ,очередь с приоитетом и чтение заданий из файла using System; using System.Collections.Generic; using System.Linq; using...

Потоки и очередь
Возникла небольшая проблема. Есть пять потоков Thread, которые дёргают объекты из очереди Queue и проводят над ними вычисления. Берут...

Потоки и очередь сообщений
Здравствуйте, форумчане. Есть необходимость в вашей помощи, натолкнуть на истину так сказать) В общем постановка задачи такая: есть...

Потоки ставятся в очередь, а не идут параллельно, объясните, пожалуйста
Добрый день, коллеги, разъясните, пожалуйста, наверняка простую ситуацию. Задача стоит в том, чтобы принимать по http одновременно...

Threads Потоки синхронизация, один producer два consumer`a и очередь
Привет. Только начал в шарпы, не говоря уже про потоки и мне тут такую задачку дали Итак дано: один produser два consumer`a. ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
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. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru