Как реализовать многопоточность на C++?
Дана вычислительная система. Заявки в источниках I1 I2...I5 генерируются каждые 5 секунд, затем, пройдя блокираторы с условиями, попадают в накопители (H). И после в каналы (K), так же через блокираторы. Проблема в том, что, к примеру, канал 1 обрабатывает заявку 3 секунды, а канал 2 - 4 секунды. И когда канал 1 обработал заявку, заявка подается на выход, и в ту же секунду в канал должна поступить новая заявка из накопителя. Следовательно, каналы должны работать параллельно. Я что-то попыталась написать, но не совсем понимаю многопоточность и параллельность. Подскажите, как это можно реализовать! Код достаточно объемный, но в дальнейшем оптимизирую. Пока хочу, чтобы все было понятно.
Ответы (1 шт):
Не размещайте ссылок на код. Всегда приводите свой код в вопросе.
По теме. Вы уверены, что вам именно в многопоточку? Если нужна честная многопоточность, топонадобится хотябы 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;
}
}