Как реализовать многопоточность на C++?

Дана вычислительная система. Заявки в источниках I1 I2...I5 генерируются каждые 5 секунд, затем, пройдя блокираторы с условиями, попадают в накопители (H). И после в каналы (K), так же через блокираторы. Проблема в том, что, к примеру, канал 1 обрабатывает заявку 3 секунды, а канал 2 - 4 секунды. И когда канал 1 обработал заявку, заявка подается на выход, и в ту же секунду в канал должна поступить новая заявка из накопителя. Следовательно, каналы должны работать параллельно. Я что-то попыталась написать, но не совсем понимаю многопоточность и параллельность. Подскажите, как это можно реализовать! Код достаточно объемный, но в дальнейшем оптимизирую. Пока хочу, чтобы все было понятно.

"onlinegdb.com/5elH7Xhqt"


Ответы (1 шт):

Автор решения: Sergey Tatarintsev

Не размещайте ссылок на код. Всегда приводите свой код в вопросе.

По теме. Вы уверены, что вам именно в многопоточку? Если нужна честная многопоточность, топонадобится хотябы C++11 (std::thread и все такое)

Как пример. Запускаются 5 потоков, и они с разной периодичностью выводят сообщение на экран

#include <string>
#include <iostream>
#include <thread>
#include <chrono>
#include <vector>

/* 
 * Функция, которая будет крутиться в потоке
 * msg - строковое название
 * timeout - периодичность вывода сообщения в сек.
 */ 
void task(std::string msg, int timeout)
{
    while(true)
    {
        // Задержка на timeout сек
        std::this_thread::sleep_for(std::chrono::seconds(timeout));
        // вывод сообщения
        std::cout << "task says: " << msg<< std::endl;
    }
}

int main()
{
    std::vector<std::thread> threads;
    // создаем потоки
    for (unsigned i=1; i<5; ++i)
    {
        std::string str = "thread " + std::to_string(i);
        threads.push_back(std::thread(task, str, i));
    }
    // джойним созданные потоки
    for (unsigned i = 0; threads.size(); i++) {
        threads[i].join();
        std::cout << "Joined thread " << i << std::endl;
    }
    
}
→ Ссылка