Два параллельных цикла на разных ядрах С++

Рейтинг: 1Ответов: 2Опубликовано: 23.03.2015

Как запустить в одной программе два цикла, допустим, while(true){...} на разных ядрах, чтобы крутились в раз?

Ответы

▲ 2

Планировщик потоков операционной системы в большинстве случаев достаточно хорош, поэтому предоставьте ему самому распределить потоки по ядрам.

#include <iostream>
#include <thread>

using namespace std;

int main(int argc, const char * argv[]) {

    auto func = [](string msg){ while(true) {cout << msg;} };

    thread th1(func, "1");
    thread th2(func, "2");

    th1.join();
    th2.join();

    return 0;
}
▲ 1

Большинство умных ос самостоятельно разделят "тяжелые потоки" между разными ядрами. Но если хотите, можно подсказать системе. Для этого в windows есть функция SetThreadAffinityMask, которая позволяет привязать поток к ядру/процессору.