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 |
ret 状态打印为 NULL 。为什么它打印一个 NULL 地址。
The ret status prints as NULL . Why does it print a NULL address.
这是因为你的线程函数返回
1
|
return NULL;
|
如果你把它改成类似
1
|
return"Hello, multithreaded world!";
|
你会看到字符串被主线程打印出来了。
因为你的函数返回
换句话说,无论你的函数返回什么,它都会返回。
检查这个例子:
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 以表示平衡,但下次请在询问之前更加努力地搜索。 :)
首先,你需要调用
1
2 3 4 5 6 7 |
void* func(void* arg){
sleep(1); printf("/ tid : %u / ",(unsigned int)pthread_self()); pthread_exit(NULL); } |
另外,如果你返回
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269356.html