首先让我说你是一个伟大的社区。我已经访问了这个网站数百次,我总是得到帮助!
但是,我仍然很擅长编程,有些东西我无法在互联网上找到答案,所以我会在这里问一下,看看能否得到一些帮助。另外,我的英语不是很好所以我提前道歉,我希望你们理解我的问题:
我需要用C ++做一个多线程程序来创建最多5个线程来处理一个带有100个对象的std :: vector。所以这是我的问题:我应该如何创建循环?为了创建5个线程,每个线程处理一个对象。因此,当线程完成时,它可以继续下一个。
void * threaded_objectProcessor (void *voidArg)
{
//process the object
}
main()
{
//beginning of my code
for (std::vector<myObject>::iterator it = myVector.begin(); it != myVector.end(); it++)
{
//don't know what to do here
}
//rest of my code
}
我希望我能够解释自己,并且提前谢谢你们,欢迎任何帮助。
Antirreni91
答案 0 :(得分:0)
简单的解决方案是使用openmp
库。它需要-fopenmp
编译器标志,您的应用程序必须链接到libgomp
库。
您的代码也需要修改:
for (std::vector<myObject>::iterator it = myVector.begin(); it != myVector.end(); it++)
{
//don't know what to do here
}
必须更改为编译器的definitive-end-condition。完成所有更改后,您的代码将如下所示:
const size_t count = myVector.size();
#pragma omp parallel for num_threads(5)
for (size_t i = 0; i < count; ++i) {
// or change this how you want to work with your vector
threaded_objectProcessor(myVector[i]);
}