pthread_join returns 一个 NULL 地址
pthread_join returns a NULL address
我是 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 地址。
因为你的函数 returns NULL
.
换句话说,它会 return 无论你的函数 returns.
检查这个例子:
#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。
The pthread_join() function shall suspend execution of the calling thread until the target thread terminates, unless the target thread has already terminated. On return from a successful pthread_join() call with a non-NULL value_ptr argument, the value passed to pthread_exit() by the terminating thread shall be made available in the location referenced by value_ptr. When a pthread_join() returns successfully, the target thread has been terminated.
我还建议您阅读 this question and check this link,其中实际展示了如何使用此功能。
PS - 我给了你 +1 的余额,但下次请在询问之前更加努力地搜索。 :)
首先,您需要调用pthread_exit()
:
void* func(void* arg){
sleep(1);
printf("\n tid : %u \n",(unsigned int)pthread_self());
pthread_exit(NULL);
}
此外,如果您 return NULL
,那么这就是 return 值。
The ret status prints as NULL . Why does it print a NULL address.
发生这种情况是因为您的线程函数正在返回 NULL
:
return NULL;
如果你把它改成类似
return "Hello, multithreaded world!";
你会看到字符串被主线程打印出来。
我是 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 地址。
因为你的函数 returns NULL
.
换句话说,它会 return 无论你的函数 returns.
检查这个例子:
#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。
The pthread_join() function shall suspend execution of the calling thread until the target thread terminates, unless the target thread has already terminated. On return from a successful pthread_join() call with a non-NULL value_ptr argument, the value passed to pthread_exit() by the terminating thread shall be made available in the location referenced by value_ptr. When a pthread_join() returns successfully, the target thread has been terminated.
我还建议您阅读 this question and check this link,其中实际展示了如何使用此功能。
PS - 我给了你 +1 的余额,但下次请在询问之前更加努力地搜索。 :)
首先,您需要调用pthread_exit()
:
void* func(void* arg){
sleep(1);
printf("\n tid : %u \n",(unsigned int)pthread_self());
pthread_exit(NULL);
}
此外,如果您 return NULL
,那么这就是 return 值。
The ret status prints as NULL . Why does it print a NULL address.
发生这种情况是因为您的线程函数正在返回 NULL
:
return NULL;
如果你把它改成类似
return "Hello, multithreaded world!";
你会看到字符串被主线程打印出来。