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

Потоки С++

22.06.2020, 21:27. Показов 4418. Ответов 49

Author24 — интернет-сервис помощи студентам
Добрый вечер! Вот есть у меня такая задача, у С++ с потоками никогда не работал. Здесь вот такая постановка задание: есть вот 3 класса: класс Cpuqueue описывает очередь, класс Cpuprocess моделирует поток процессов, а класс CPU – поток обслуживания процесса центральным процессором. Очереди, потоки процессов и обслуживания процесса моделируются с помощью объектов соответствующего класса. Параметры очереди моделируются с помощью алгоритмов вставки и вытягивания процесса с очереди. Параметром процесса является интервал времени между двумя последовательными генерациями процессов. Параметром процессора является время обслуживания процесса. Случайное время для интервалов между моментами генерации процессов и для времени распределенные по равномерному закону распределения с заданными верхней и нижней границами Начальными данными для моделирования есть количество процессов, которые должны сгенерировать ( для каждого потока процессов), а также нижние и верхние границы для потоков.
Вот что мне собственно нужно сделать: программа моделирует один поток процессов несколькими центральными процессорами компьютера с несколькими очередями одинакового размера. Если процесс сгенерировал в тот момент, когда первая очередь заполнена, процесс помещается в следующую очередь, для обработки которой запускается второй процессор. Если и эта очередь заполнена, создается третья очередь и запускается третий процессор и так далее. Определите количество задействованных процессоров, максимальное длину последней очереди и процент от общего количества процессов, которые были обработаны каждым процессором.
Вообще нужно срочно сделать эту программу, я понятие не имею с чего начать. Смотрел похожие примеры в Джава, но как делать именно в С++ не знаю.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2020, 21:27
Ответы с готовыми решениями:

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Байтовые потоки и потоки символов
Объясните, пожалуйста подробно что имелось ввиду На самом низком уровне все операции ввода/вывода в С# оперируют байтами. Подобный...

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

49
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.06.2020, 22:18
Цитата Сообщение от Parasha Посмотреть сообщение
Если процесс сгенерировал в тот момент, когда первая очередь заполнена, процесс помещается в следующую очередь
Это ты сам придумал? Обычно достаточно одной очереди и нескольких потоков.
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
22.06.2020, 23:17  [ТС]
oleg-m1973, нет такая постановка задача, я понимаю шо звучит как то глупо и вообще такое не юзается
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.06.2020, 23:22
Цитата Сообщение от Parasha Посмотреть сообщение
oleg-m1973, нет такая постановка задача, я понимаю шо звучит как то глупо и вообще такое не юзается
Тебе здесь понадобится один std::mutex, одна std::condition_variable и несколько std::deque и std::thread (одна очередь на один поток)
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
22.06.2020, 23:38  [ТС]
oleg-m1973, а можете какие наброски сделать, как это должно виглядить?
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.06.2020, 23:49
Лучший ответ Сообщение было отмечено Parasha как решение

Решение

Цитата Сообщение от Parasha Посмотреть сообщение
oleg-m1973, а можете какие наброски сделать, как это должно виглядить?
Что-то типа
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
class CProcessor
{
public:
    static constexpr size_t max_queue = 10;
    ~CProcessor()
    {
        m_mx.lock();
        m_stop = true;
        m_mx.unlock();
        m_cv.notify_one();
        m_thread.join();
    }
    
    bool push_task(const std::function<void()> &task)
    {
        std::lock_guard lock(m_mx);
        if (m_tasks.size() >= max_queue)
            return false;
 
        m_tasks.push_back(task);
        m_cv.notify_one();
        return true;
    }
protected:
    void ThreadProc()
    {
        for (;;)
        {
            std::function<void()> task;
            {
                std::unique_lock lock(m_mx);
                for (;;)
                {
                    if (m_stop)
                        return;
 
                    if (!m_tasks.empty())
                    {
                        task = std::move(m_tasks.front());
                        m_tasks.pop_front();
                        break;
                    }
 
                    m_cv.wait(lock);
                }
            }
 
            task();
        }
    }
 
    std::mutex m_mx;
    std::condition_variable m_cv;
 
    volatile bool m_stop = false;
    std::deque<std::function<void()>> m_tasks;
    std::thread m_thread{&CProcessor::ThreadProc, this};
};
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.06.2020, 23:54
Parasha, хрошее у вас имя. Древнее, женское, сермяжное.
Смотрите. В С++ на уровне библиотек поддерживаются потоки. При истинной асинхронности на уровне процессора, субъектом выполнения является ядро процессора. Их должно быть более 1.
У вас же многопроцессная задача на системе с несколькими центральными процессорами. Какую модель IPC выбрали? Это не новичковская задача (имхо).
А может слова выбрали не те, для описания задачи?
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
23.06.2020, 00:02  [ТС]
IGPIGP, та слова вроде все что надо подобрал, а что вы имеете ввиду под моделью IPC?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.06.2020, 00:05
Цитата Сообщение от Parasha Посмотреть сообщение
IGPIGP, та слова вроде все что надо подобрал, а что вы имеете ввиду под моделью IPC?
https://ru.wikipedia.org/wiki/... 0%B8%D0%B5
Может речь о потоках в рамках одного процесса и о ядрах в пределах одного процессора? IPC это широкий мир. Там можно распределять задачи на разных системах (операционных в том числе).
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
23.06.2020, 00:12  [ТС]
IGPIGP, то есть вы имеете ввиду что на нескольких процессорах это делать нежелательно?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.06.2020, 00:34
Цитата Сообщение от Parasha Посмотреть сообщение
IGPIGP, то есть вы имеете ввиду что на нескольких процессорах это делать нежелательно?
Нет, не это. На разных вычислительных системах IPC и делается. Я хотел лишь уточнить, что в вашей задаче имеется ввиду. Вы различаете процесс и поток?
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
23.06.2020, 14:12  [ТС]
IGPIGP, ну не совсем понимаю в чем разница

Добавлено через 1 час 33 минуты
oleg-m1973, а можете весь код написать, был б очень вам благодарен, что-то я совсем запутался, если канешно у вас есть такая возможность
0
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
23.06.2020, 15:39
Parasha,
Первое: если текст задания - это ваш перевод с английского, то лучше выложите оригинал, потому что это читать трудно.
Второе: если действительно нужно
Цитата Сообщение от Parasha Посмотреть сообщение
программа моделирует
,
то моделировать это нужно в однопоточном приложении, что бы результаты вроде
Цитата Сообщение от Parasha Посмотреть сообщение
Определите количество задействованных процессоров, максимальное длину последней очереди и процент от общего количества процессов, которые были обработаны каждым процессором.
были корректными, и не зависили от планировщика ОС, реального "параллелизма" машины, на которой будет запускаться моделирование, и т.д.
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
23.06.2020, 20:23  [ТС]
zayats80888, нет задание так и было задано, может и кто-то переводил с английского, не знаю; насчет вашего другого замечания я не совсем понял что вы имеете ввиду
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
24.06.2020, 17:26  [ТС]
oleg-m1973, можете помочь или у вас нету времени?
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
24.06.2020, 17:39
Лучший ответ Сообщение было отмечено Parasha как решение

Решение

Цитата Сообщение от Parasha Посмотреть сообщение
oleg-m1973, можете помочь или у вас нету времени?
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    CProcessor procs[8];
    for (;;)
    {
 
        for (size_t  i = 0; i < 1000; ++i)
            for (size_t  j = 0; j < std::size(procs); ++j)
                if (procs[j].push_task([i, j](){printf("Processor #%llu: %llu\n", j, i);}))
                    break;
            
 
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}
1
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
24.06.2020, 21:49  [ТС]
oleg-m1973, а что вы предложить насчет классов Cpuqueue и Cpuprocess?
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
24.06.2020, 21:52
Цитата Сообщение от Parasha Посмотреть сообщение
oleg-m1973, а что вы предложить насчет классов Cpuqueue и Cpuprocess?
Ничего. Что это за классы?
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
24.06.2020, 21:56  [ТС]
oleg-m1973, вы хотите сказать что их не нужно делать, фактически первый для реализации очереди, а второй для моделирование потока процессов?
0
0 / 1 / 0
Регистрация: 07.05.2020
Сообщений: 129
28.06.2020, 19:01  [ТС]
oleg-m1973, можете подсказать еще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2020, 19:01
Помогаю со студенческими работами здесь

потоки
Люди,подскажите кто знает! #include&lt;windows.h&gt; #include&lt;iostream&gt; using namespace std; HANDLE hm; const int N=5; int...

Потоки
Задание: 1.Отображение списка запущенных потоков. 2.Создание нового потока по запросу пользователя.(это у меня сделано и работает) ...

потоки...
Народ, вот создай 10 потоков, ну например они будут выводить числа в рич текст бокс private void button1_Click(object sender, EventArgs...

Потоки
Не создается новый поток (строка номер 33): #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include...

Потоки
Есть такой файл: Andriy aa 1 2 3 Petro dd 1 1 1 Vasa rdg 5 5 88 Ivan n 5 5 5 И нужно определить такое имя, у которого есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Сложность Колмогорова: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
C++26: Индексирование пакетов и метапрограммиро­вание
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
Состояние гонки в C#: подводные камни многопоточного программировани­я
UnmanagedCoder 20.03.2025
Что такое состояние гонки? Это ситуация, когда результат программы непредсказуемо меняется в зависимости от порядка выполнения потоков. Проще говоря, два или более потока пытаются одновременно. . .
Next.js для разработки React: преимущества серверного рендеринга
Reangularity 20.03.2025
Next. js решает классическую проблему React-приложений: медленную первоначальную загрузку и плохую индексацию поисковиками. Вместо того чтобы заставлять браузер пользователя выполнять всю работу по. . .
JUnit или TestNG: Выбираем Java-фреймворк для тестирования
Javaican 20.03.2025
История тестовых фреймворков в Java началась в конце 90-х, когда Кент Бек и Эрих Гамма разработали JUnit - инструмент, который перевернул представление разработчиков о модульном тестировании. JUnit. . .
Разбиваем монолит на два микросервиса и реализуем CI/CD
ArchitectMsa 20.03.2025
Когда команда растет, а функциональность монолита расширяется, поддерживать и развивать такую систему становится все труднее. Разработчики начинают тратить много времени на разбор сложных. . .
Python и PDF: Создание и редактирование файлов
py-thonny 20.03.2025
Работа с PDF-документами – одна из популярных задач в современной разработке. Python предлагает несколько инструментов для создания, чтения и редактирования PDF-файлов, среди которых особенно. . .
Корутины в Unity и производительно­сть WaitForSeconds
GameUnited 20.03.2025
Разработчики игр на Unity часто сталкиваются с вопросом: как выполнять действия через определённые промежутки времени, не блокируя основной поток игры? Тут как раз и приходят на помощь корутины —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер