关于 c:pthread_join 返回一个 NULL 地址
pthread_join returns a NULL address
我是 C 线程编程的新手。我在下面尝试了一个简单的程序。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include<stdio.h>
#include<pthread.h> void* func(void* arg){ int main(){ |
ret 状态打印为 NULL 。为什么它打印一个 NULL 地址。
The ret status prints as NULL . Why does it print a NULL address.
这是因为你的线程函数返回 NULL:
|
1
|
return NULL;
|
如果你把它改成类似
|
1
|
return"Hello, multithreaded world!";
|
你会看到字符串被主线程打印出来了。
因为你的函数返回 NULL.
换句话说,无论你的函数返回什么,它都会返回。
检查这个例子:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include<stdio.h>
#include<pthread.h> void* func(void* arg){ int main(){ |
输出:
|
1
2 3 4 5 |
samaras@samaras-A15:~$ ./px
tid : 3075947328 ret status : I am done <-- and not NULL |
您应该阅读手册。
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.
我还建议你阅读这个问题并检查这个链接,它实际上展示了你如何使用这个功能。
PS - 我给你一个 1 以表示平衡,但下次请在询问之前更加努力地搜索。 🙂
相关讨论
- 谢谢萨姆拉斯。看说明书的时候看不懂。但是看了你的回答我就明白了。感谢您的链接。
首先,你需要调用 pthread_exit():
|
1
2 3 4 5 6 7 |
void* func(void* arg){
sleep(1); printf(" tid : %u ",(unsigned int)pthread_self()); pthread_exit(NULL); } |
另外,如果你返回NULL,那么这就是返回值。