创建可变数量的std::线程

Create variable number of std::threads

本文关键字:std 线程 创建      更新时间:2023-10-16

我有一个线程程序,必须在多台计算机上运行。它们中的每一个都有不同数量的受支持线程。在我开发程序的计算机中有4个线程,所以我硬编码了4个要创建的线程。我想根据情况而有所不同。我想使用std::thread::hardware_concurrency来获取线程数,并将工作划分为可用的线程数。这可能吗?

硬编码线程创建是:

   //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,但我是多线程编程的新手,不知道怎么做

谢谢你抽出时间。

这可能吗?

是的。

我正在考虑使用std::vector

好主意。这正是我建议你使用的。向量中的线程数在运行时可能会有所不同。

但我是多线程编程的新手,不知道怎么做。

只使用创建其他线程的原始主线程中的线程向量。由于您在单线程中使用向量,因此它的使用与在单线程程序中使用向量没有任何不同。