C 加入POSIX线程返回3
这是我关于线程的代码。我的问题是,我创建了一个具有可连接属性的线程(我知道它是默认值),但是当我调用C 加入POSIX线程返回3,c,multithreading,pthreads,C,Multithreading,Pthreads,这是我关于线程的代码。我的问题是,我创建了一个具有可连接属性的线程(我知道它是默认值),但是当我调用pthread\u join()时,返回值等于3,而不是0。我不明白为什么 void* blue(struct image *img) { printf("Launching blue filter\n"); if (filter_blue(img)) { perror("Error calling filter_blue"); pthread_exit((
pthread\u join()
时,返回值等于3
,而不是0
。我不明白为什么
void* blue(struct image *img)
{
printf("Launching blue filter\n");
if (filter_blue(img))
{
perror("Error calling filter_blue");
pthread_exit((void*)1);
}
pthread_exit(NULL);
}
// in main file:
pthread_t thread[parameters.num_threads];
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for (j=parameters->num_threads - parameters->num_threads_left; count < img->blue_threads ; j++)
{
pthread_create(&thread[j], &attr, (void*)blue, img);
printf("blue found\n");
count++;
}
void *status;
for (i=0; i<num_thread; i++)
{
int a = pthread_join(thread[i], &status);
printf("pthread join return value: %d \n",a);
}
pthread_attr_destroy(&attr);
void*蓝色(结构图像*img)
{
printf(“启动蓝色过滤器”);
中频(滤光片_蓝(img))
{
perror(“调用筛选器_blue时出错”);
pthread_exit((void*)1);
}
pthread_exit(NULL);
}
//在主文件中:
pthread_t thread[parameters.num_threads];
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,pthread_CREATE_JOINABLE);
对于(j=parameters->num\u threads-parameters->num\u threads\u left;countblue\u threads;j++)
{
pthread_create(&thread[j],&attr,(void*)蓝色,img);
printf(“找到蓝色\n”);
计数++;
}
无效*状态;
对于(i=0;i,pthread*
函数族返回在errno
中找到的值
3
是ESRCH
,它()表示传递的线程
(pthread_join()
的第一个参数)的值与现有线程不匹配
因为您显示的代码不清楚哪些标记用于存储调用
pthread\u create()返回的pthread\u t
值
不可能再提供解决此问题的具体提示,只建议双击检查数组元素线程的访问方式。使用调试器可能会有很大帮助。您的代码不会显示num\u thread
在何处声明,或num\u thread
如何记录eive是反映数组中线程数的正确值。因此,线程创建循环甚至开始将线程放置在线程[0]
上并不明显。