Reputation: 1519
I have a threaded program that I have to run on multiple computers. Each of them have a different number of supported threads. In the computer that I developed the program there are 4 threads , and so I hard coded 4 threads to be created. I want to make this vary according to the situation . I want to use std::thread::hardware_concurrency to get the number of threads , and divide the work into the number of threads available . Is this possible ?
The hard coded thread creation is :
//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 ;
}
I am thinking of using a std::vector , but I am new to multi threaded programming and don't know how do it.
Thank you for your time.
Upvotes: 1
Views: 1439
Reputation: 238331
Is this possible ?
Yes.
I am thinking of using a std::vector
Good idea. That's exactly what I recommend you to use. The number of threads in a vector can vary during runtime.
but I am new to multi threaded programming and don't know how do it.
You only use the vector of threads in the original main thread that creates the other threads. Since you use the vector in a single thread, it's use doesn't differ in any way from using a vector in a single-threaded program.
Upvotes: 2