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]
上并不明显。