1

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.

8
  • 4
    Have you tried using a vector for the threads? How did that work? How didn't it work? What problems did you encounter? Commented Nov 26, 2015 at 14:52
  • I am thinking of using a std::vector That's a good idea. But I can't see what specific problem do you have now. Creating the threads, splitting the work...? Commented Nov 26, 2015 at 14:53
  • @JoachimPileborg I do not know actually. I was thinking I could use a for loop which loops till SIZE and put them in a vector ? I was wondering if it would work Commented Nov 26, 2015 at 14:54
  • Oh, and C++ isn't Java, you don't have to use new to create instances. In fact, try to use as few pointers as possible. In this case I see no use for any pointers at all. Commented Nov 26, 2015 at 14:54
  • 3
    And on an unrelated note, don't use symbol names starting with an underscore followed by an upper-case letter (like you _SIZE_ macro), such names are reserved for the implementation (compiler and standard library). Commented Nov 26, 2015 at 14:56

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.