C++ 多线程程序,将线程保存在向量中而不是数组中
我发现了一个简单的例子,展示了如何在C++ 多线程程序,将线程保存在向量中而不是数组中,c++,multithreading,C++,Multithreading,我发现了一个简单的例子,展示了如何在C++中使用treads。我了解它是如何工作的,但是我无法将源代码更改为使用线程的向量,而不是数组。我想使用vector创建尽可能多的线程。有谁能告诉我,如何实现它,我在哪里犯了错误(注释代码就是我试图实现的) #包括 #包括 #包括 使用名称空间std; #定义NUM_线程5 void*PrintHello(void*threadid) { 长tid; tid=(长)线程ID; cout您必须首先分配pthread\u t元素: pthread_t newT
C++
中使用treads
。我了解它是如何工作的,但是我无法将源代码更改为使用线程的向量,而不是数组。我想使用vector
创建尽可能多的线程。有谁能告诉我,如何实现它,我在哪里犯了错误(注释代码就是我试图实现的)
#包括
#包括
#包括
使用名称空间std;
#定义NUM_线程5
void*PrintHello(void*threadid)
{
长tid;
tid=(长)线程ID;
cout您必须首先分配pthread\u t
元素:
pthread_t newThread;
rc = pthread_create(&newThread, NULL, PrintHello, (void *)i);
vectorOfThreads.push_back(newThread);
默认构造的向量(vector-vectorOfThreads;
)以空开头,这意味着在循环中,访问vectorOfThreads[i]
会导致未定义的行为(可能是segfault崩溃)
如果将向量创建为
vector<pthread_t> vectorOfThreads(NUM_THREADS);
矢量线程(NUM_线程);
会有用的
或者:
vector<pthread_t> vectorOfThreads;
//...
for(/*...*/) {
pthread_t new_thread;
rc = pthread_create(&new_thread, NULL,
PrintHello, (void *)i);
vectorOfThread.push_back(new_thread);
}
矢量读取;
//...
对于(/*…*/){
pthread\u t新线程;
rc=pthread_create(&new_线程,NULL,
PrintHello,(void*)i);
矢量读取。向后推(新线程);
}
有关向量及其成员函数的作用的详细信息,请参见。您的代码在将向量项添加到向量之前使用向量项。zakinster给出了一种解决方案。另一种是使用:
vectorOfThreads.resize(NUM_THREADS);
这将创建一个向量,其中包含空的NUM_THREADS
元素。您现在可以像使用数组一样使用这些元素。您面临的具体问题是什么?您尝试了什么?如果取消对向量版本的注释,会出现什么错误?我认为问题是代码使用了vectorOfThread中的条目现在还没有。
vectorOfThreads.resize(NUM_THREADS);