Как сделать так что-бы несколько потоков выполняли одну функцию? C++
#include <iostream>
#include <cstdlib>
using namespace std;
void foo() {
int i = 0;
while (i != 100000) {
cout << i << endl;
i++;
}
}
int main()
{
system("chcp 1251>nul");
//*волшебная функция*(foo);
system("pause>nul");
return 0;
}
Если запустить этот код то выполняться он будет довольно долго, так-как надо вывести 100 тысяч элементов и всем этим занимается лишь 1 поток. Вопрос в том, как же мне сделать так что-бы этим занимался не 1 поток, а скажем 2? Или 4? Или сразу все 8? Может есть какая-нибудь волшебная функция?
Ответы (2 шт):
консоль разделяемый ресурс, поэтому в одно время только один поток может писать в неё безопасно, чтобы несколько потоков выполняли одну функцию смотрите в сторону например реализации многопоточности в стандартной библиотеки std::thread или OpenMP технологии
Просто добавьте перед выводом такое
std::ios_base::sync_with_stdio(false);
в некоторых случаях это в раз десять добавит к скорости вывода.
Но тут есть ещё одна штука. Если пользуетесь стандартным консольным виндовым окно (а судя по двум system - это так и есть), то не забывайте, что она также достаточно "подтормаживает. Попробуйте установить windows terminal - даже просто замена консоли может сильно-сильно ускорить вывод.
С другой стороны, размер буфера консоли вывода ограничена. Так что можно вывести просто последние пару тысяч, все равно никто не поймет.