Два параллельных цикла на разных ядрах С++
Как запустить в одной программе два цикла, допустим, while(true){...}
на разных ядрах, чтобы крутились в раз?
Источник: Stack Overflow на русском
Как запустить в одной программе два цикла, допустим, while(true){...}
на разных ядрах, чтобы крутились в раз?
Планировщик потоков операционной системы в большинстве случаев достаточно хорош, поэтому предоставьте ему самому распределить потоки по ядрам.
#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;
}
Большинство умных ос самостоятельно разделят "тяжелые потоки" между разными ядрами. Но если хотите, можно подсказать системе. Для этого в windows есть функция SetThreadAffinityMask, которая позволяет привязать поток к ядру/процессору.