У меня есть программа с потоком, которую я должен запускать на нескольких компьютерах. Каждое из них имеет различное количество поддерживаемых потоков. В компьютере, на котором я разработал программу, есть 4 потока, и поэтому я жестко закодировал 4 потока, которые нужно создать. Я хочу, чтобы это менялось в зависимости от ситуации. Я хочу использовать std :: thread :: hardware_concurrency, чтобы получить количество потоков и разделить работу на количество доступных потоков. Это возможно ?Создать переменное число std :: threads
создание Твердая закодированы нить:
//const unsigned int SIZE = std::thread::hardware_concurrency ;
const unsigned int SIZE = 4 ;
void zeroOut(std::vector<obj> vec , int start , int end)
{
// Does an operation on vec from start index to end index
}
int main() {
std::vector<obj_thread> vec ;
// Do some work on vec. Fill it with values.
unsigned int step = vec.size()/SIZE;
std::thread thread1(zeroOut,vec,step,step*2);
std::thread thread2(zeroOut,vec,step*2,step*3);
std::thread thread3(zeroOut,vec,step*3,step*4);
zeroOut(vec, 0 , step);
thread1.join();
thread2.join();
thread3.join();
return 0 ;
}
Я имею в виду, используя зЬй :: вектор, но я новичок в многопоточных программирования и не знаю, как это сделать.
Спасибо за ваше время.
Вы * пробовали * используя вектор для создания темы? Как это работает? Как это не сработало? С какими проблемами вы столкнулись? –
'Я думаю об использовании std :: vector' Это хорошая идея. Но я не вижу, какая конкретная проблема у вас есть сейчас. Создание потоков, разделение работы ...? – deviantfan
@JoachimPileborg На самом деле я не знаю. Я думал, что могу использовать цикл for, который петли до _SIZE_ и помещает их в вектор? Мне было интересно, будет ли это работать – nnrales