Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ pthread_连接错误代码3_C++_Multithreading_Pthreads_Pthread Join - Fatal编程技术网

C++ pthread_连接错误代码3

C++ 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

我的项目有问题。 它向我抛出错误代码3

我只是添加了部分代码,让您看看我做了什么。 在main.cpp中,我在线程上声明,然后发送到initRequestThreads(在thread.h中)以创建线程。然后在main.cpp中,我让主进程等待它

main.cpp

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++11
std::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++11
std::thread
。如果你出于某种原因被绑定到C++2003,你至少应该停止这种糟糕的动态数组并传递指向这些数组的指针,而是使用
std::vector
作为你函数的输出参数。

你有没有针对er测试
pthread\u join
的返回值RoR编号(<代码> EvNalA,…),它将帮助您不仅仅是原始错误值。您的代码是C和C++的混乱。尝试清理它(使用<代码>向量< /代码>而不是<代码> T*<代码>,……)您是否测试了代码的返回值?它会帮助你不仅仅是原始错误值。你的代码是一个C和C++的混乱。尝试清理它(使用<代码>向量<代码>代替代码> **<代码>…这就是我所做的,伙计。我不知道有什么错。无论如何,我不能使用向量,因为那是作业。它仍然不起作用。这就是我所做的。伙计。我不知道有什么错。无论如何,我不能使用向量,因为那是作业。它仍然不起作用