免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2566 | 回复: 3
打印 上一主题 下一主题

[Linux] fork与多线程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-23 02:20 |只看该作者 |倒序浏览

  1. void * start_thread(void *arg) {
  2.    //...
  3.   pthread_exit(NULL);
  4. }

  5. int main() {
  6.     pid_t pid;
  7.     int i;

  8.     if ((pid = fork()) < 0) {
  9.         perror("fork error");
  10.     }   
  11.     else if (pid == 0) {
  12.         for (; i < 100; ++i) {
  13.             pthread_t tid;
  14.             err = pthread_create(&tid, NULL, start_thread, NULL);
  15.             if (err) {
  16.                 perror("thread create error");
  17.                 continue;
  18.             }   
  19.             err = pthread_detach(tid);
  20.             if (err) {
  21.                 perror("thread detach error");
  22.                 continue;
  23.             }
  24.         }
  25.     }
  26.     else {
  27.         if (0 > waitpid(pid, &status, 0))
  28.                 perror("wait error");
  29.         //...
  30.     }

  31.         return 0;
  32. }
复制代码
在子进程里创建了一堆子线程, 但创建了之后走到return 0子进程就结束了,还没跑完的子线程也就终止了
waitpid根本就没用了,有什么办法让父进程阻塞等待直到子进程的所有线程都退出吗

论坛徽章:
0
2 [报告]
发表于 2012-08-23 08:29 |只看该作者
把最后一个else去掉,将字进程执行完后return;

论坛徽章:
0
3 [报告]
发表于 2012-08-23 08:43 |只看该作者
哦,进程退出了,它所有的线程都会结束。

论坛徽章:
0
4 [报告]
发表于 2012-08-23 09:43 |只看该作者
        for (; i < 100; ++i) {
            pthread_t tid;
            err = pthread_create(&tid, NULL, start_thread, NULL);
            if (err) {
                perror("thread create error");
                continue;
            }   
            err = pthread_detach(tid);
            if (err) {
                perror("thread detach error");
                continue;
            }
        }

这个单独是一个进程跑的话 也是一下子就退出了。因为你的主线程退出了,子线程也就结束了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP