我是C语言编程的新手。我在下面尝试了一个简单的程序。
#include<stdio.h>
#include<pthread.h>
void* func(void* arg){
sleep(1);
printf("\n tid : %u \n",(unsigned int)pthread_self());
return NULL;
}
int main(){
pthread_t tid;
void* ret;
pthread_create(&tid,NULL,&func,NULL);
pthread_join(tid,&ret);
printf("\n ret status : %s \n",(char *)ret);
return 0;
}
ret状态打印为NULL。为什么打印NULL地址。
答案 0 :(得分:2)
因为您的函数返回NULL
。
换句话说,它将返回函数返回的任何内容。
检查此示例:
#include<stdio.h>
#include<pthread.h>
void* func(void* arg){
sleep(1);
printf("\n tid : %u \n",(unsigned int)pthread_self());
return "I am done"; // I changed the return line
}
int main(){
pthread_t tid;
void* ret;
pthread_create(&tid,NULL,&func,NULL);
pthread_join(tid,&ret);
printf("\n ret status : %s \n",(char *)ret);
return 0;
}
输出:
samaras@samaras-A15:~$ ./px
tid : 3075947328
ret status : I am done <-- and not NULL
您应该阅读manual。
pthread_join()函数应暂停执行调用线程,直到目标线程终止,除非目标线程已经终止。从具有非NULL value_ptr参数的成功pthread_join()调用返回时,终止线程传递给pthread_exit()的值应在value_ptr引用的位置可用。当pthread_join()成功返回时,目标线程已被终止。
我还建议您阅读this问题并查看this链接,该链接实际上说明了如何使用此功能。
PS - 我给了你一个+1的余额,但下次请求之前请更加努力。 :)
答案 1 :(得分:2)
ret状态打印为NULL。为什么打印NULL地址。
这是因为您的线程函数正在返回NULL
:
return NULL;
如果您将其更改为
return "Hello, multithreaded world!";
你会看到主线程打印出来的字符串。
答案 2 :(得分:-1)
首先,您需要致电pthread_exit()
:
void* func(void* arg){
sleep(1);
printf("\n tid : %u \n",(unsigned int)pthread_self());
pthread_exit(NULL);
}
此外,如果您返回NULL
,那么这就是返回值。