Как сделать так что-бы несколько потоков выполняли одну функцию? 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 шт):

Автор решения: Ildar

консоль разделяемый ресурс, поэтому в одно время только один поток может писать в неё безопасно, чтобы несколько потоков выполняли одну функцию смотрите в сторону например реализации многопоточности в стандартной библиотеки std::thread или OpenMP технологии

→ Ссылка
Автор решения: KoVadim

Просто добавьте перед выводом такое

std::ios_base::sync_with_stdio(false);

в некоторых случаях это в раз десять добавит к скорости вывода.

Но тут есть ещё одна штука. Если пользуетесь стандартным консольным виндовым окно (а судя по двум system - это так и есть), то не забывайте, что она также достаточно "подтормаживает. Попробуйте установить windows terminal - даже просто замена консоли может сильно-сильно ускорить вывод.

С другой стороны, размер буфера консоли вывода ограничена. Так что можно вывести просто последние пару тысяч, все равно никто не поймет.

→ Ссылка