【发布时间】:2015-11-26 14:50:23
【问题描述】:
我有一个线程程序,我必须在多台计算机上运行。它们中的每一个都有不同数量的受支持线程。在我开发程序的计算机中有 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 ,但我是多线程编程的新手,不知道怎么做。
感谢您的宝贵时间。
【问题讨论】:
-
您是否尝试过为线程使用向量?那是怎么工作的?怎么没用?你遇到了什么问题?
-
I am thinking of using a std::vector这是个好主意。但我看不出你现在有什么具体问题。创建线程,拆分工作......? -
@JoachimPileborg 实际上我不知道。我在想我可以使用一个循环直到 SIZE 并将它们放入向量中的循环?我想知道它是否会起作用
-
哦,C++ 不是 Java,您不必使用
new来创建实例。事实上,尽量使用尽可能少的指针。在这种情况下,我认为任何指针都没有用。 -
另外,请注意,不要使用以下划线后跟大写字母开头的符号名称(例如
_SIZE_宏)、such names are reserved for the implementation(编译器和标准库)。
标签: c++ multithreading c++11 stdvector stdthread