C++ pthread_连接错误代码3
我的项目有问题。 它向我抛出错误代码3 我只是添加了部分代码,让您看看我做了什么。 在main.cpp中,我在线程上声明,然后发送到initRequestThreads(在thread.h中)以创建线程。然后在main.cpp中,我让主进程等待它 main.cppC++ pthread_连接错误代码3,c++,multithreading,pthreads,pthread-join,C++,Multithreading,Pthreads,Pthread Join,我的项目有问题。 它向我抛出错误代码3 我只是添加了部分代码,让您看看我做了什么。 在main.cpp中,我在线程上声明,然后发送到initRequestThreads(在thread.h中)以创建线程。然后在main.cpp中,我让主进程等待它 main.cpp pthread_t *requestersThreads = new pthread_t[Length_Tasks]; requestsPool->initRequestThreads(&requestersThread
pthread_t *requestersThreads = new pthread_t[Length_Tasks];
requestsPool->initRequestThreads(&requestersThreads);
void* status;
// wait for all requests threads
for(t=0; t<Length_Tasks; t++) {
rc = pthread_join(requestersThreads[t], &status);
if (rc) {
cout<<"ERROR; return code from pthread_join() is "<< rc <<endl;
exit(-1);
}
cout<<"Main: completed join with REQUEST thread " << t <<" having a status of "<<(long)status<<endl;
}
// wait for all resolvers threads
for(t=0; t<resolveThreadsAmount; t++) {
rc = pthread_join(reoslveThreads[t], &status);
if (rc) {
cout<<"ERROR; return code from pthread_join() is "<< rc <<endl;
exit(-1);
}
cout<<"Main: completed join with RESOLVER thread " << t <<" having a status of "<<(long)status<<endl;
}
delete[] tasks;
delete[] TaskQueueRequests;
delete[] TaskQueueResolves;
//delete[] requestersThreads;
//delete[] reoslveThreads;
pthread_mutex_destroy(&TaskQueueResolves_lock);
pthread_cond_destroy(&TaskQueueResolves_cond);
pthread_t*requestersThreads=newpthread_t[Length_Tasks];
requestsPool->initRequestThreads(&requestersThreads);
无效*状态;
//等待所有线程的请求
对于(t=0;t而言,您得到的错误代码是ESRCH
——这意味着您尝试加入的线程不存在
原因是代码中关于如何处理线程ID的未定义行为非常混乱
pthread_t *requestersThreads = new pthread_t[Length_Tasks];
这将创建一个由N个线程组成的数组,然后将指向该数组的指针传递给中的函数
initRequestThreads(&requestersThreads);
现在,在线程创建循环中,您可以
threads[i] = new pthread_t;
pthread_create(&(*threads[i]), &attr /*... */
在这里,你完全弄乱了你的数组并触发了未定义的行为。在你的函数中,线程
不是数组!它是数组的地址。你不能用数组下标操作符
([]
)访问它。其余的只是对已经发生在这里的伤害的侮辱
如果您正在编写C++11及以上版本(如2017年所述)你应该使用C++11std::thread
。如果你出于某种原因被绑定到C++2003,你至少应该停止这种糟糕的动态数组并传递指向这些数组的指针,而是使用std::vector
作为你函数的输出参数。你得到的错误代码是ESRCH
-这意味着您试图加入的read不存在
原因是代码中关于如何处理线程ID的未定义行为非常混乱
pthread_t *requestersThreads = new pthread_t[Length_Tasks];
这将创建一个由N个线程组成的数组,然后将指向该数组的指针传递给中的函数
initRequestThreads(&requestersThreads);
现在,在线程创建循环中,您可以
threads[i] = new pthread_t;
pthread_create(&(*threads[i]), &attr /*... */
在这里,你完全弄乱了你的数组并触发了未定义的行为。在你的函数中,线程
不是数组!它是数组的地址。你不能用数组下标操作符
([]
)访问它。其余的只是对已经发生在这里的伤害的侮辱
如果您正在编写C++11及以上版本(如2017年所述)你应该使用C++11std::thread
。如果你出于某种原因被绑定到C++2003,你至少应该停止这种糟糕的动态数组并传递指向这些数组的指针,而是使用std::vector
作为你函数的输出参数。你有没有针对er测试pthread\u join
的返回值RoR编号(<代码> EvNalA,…),它将帮助您不仅仅是原始错误值。您的代码是C和C++的混乱。尝试清理它(使用<代码>向量< /代码>而不是<代码> T*<代码>,……)您是否测试了代码的返回值?它会帮助你不仅仅是原始错误值。你的代码是一个C和C++的混乱。尝试清理它(使用<代码>向量<代码>代替代码> **<代码>…这就是我所做的,伙计。我不知道有什么错。无论如何,我不能使用向量,因为那是作业。它仍然不起作用。这就是我所做的。伙计。我不知道有什么错。无论如何,我不能使用向量,因为那是作业。它仍然不起作用