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);