作者shihyu (shihyu)
看板LinuxDev
标题[问题] pthread_join 作用
时间Sat Nov 24 22:04:53 2018
我程式码中把pthread_join 注解test函数thread无法印完10次
但是我网路看到解释 pthread_join 让main thread 等待test函数的做完才能做资源释放
为什麽 main thread 结束 也会影响 test函数的thread 也跟着结束?
而不是像 process 父行程先死掉变成孤儿的概念 由 init 行程去回收?
谢谢
#include <pthread.h>
void test(void)
{
int i;
for (i = 0; i < 10; i++) {
printf("This is a thread n\n");
}
}
int main(void)
{
pthread_t id;
int i, ret;
pthread_create(&id, NULL, (void*) test, NULL);
for (i = 0; i < 2; i++) {
printf("This is the process n");
}
// pthread_join(id, NULL);
return (0);
}
https://gist.github.com/shihyu/10f7021b4a0f277b1cf9d045a8d41e86
我不懂是 fork 的父行程先结束 , 子行程可以印完才结束,
但是子thread会被父thread 影响到提早结束
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 175.182.113.117
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1543068296.A.7DE.html
1F:→ liang168: 这没你讲的那麽复杂 但真的有兴趣看看 恐龙书吧 11/24 22:35
※ 编辑: shihyu (175.182.113.117), 11/24/2018 23:39:50
2F:推 b0920075: fork是直接跑一个process出来,跟用同个process搞threa 11/25 14:51
3F:→ b0920075: d出来差很多吧 11/25 14:51
4F:→ tjjh89017: 我觉得这部分的情况可能会是child先死,导致的zombie 11/25 15:02
5F:→ tjjh89017: process,所以init才不会去接管 11/25 15:02
6F:→ tjjh89017: 或者是因为parent process结束,fd 0,1被导回bash 11/25 15:03
7F:→ tjjh89017: 所以child process print不会显示 11/25 15:03
9F:→ yvb: 在程式 pthread_join() 下加一行 pthread_exit(&ret); 试试. 11/25 17:58
10F:→ yvb: 搭配 ps ax 和 ps axH 看看 process 和 threads 的情况. 11/25 17:59
13F:推 shihyu: yvb 感谢喔 11/27 21:58
※ 编辑: shihyu (106.104.69.161), 11/27/2018 21:58:56