问一段 APUE 上关于线程部分的代码
时间:2010-08-19
来源:互联网
本帖最后由 tanggula2007 于 2010-08-19 22:35 编辑
问题是这样的:
按照书上所说(APUE(第2版) 中文版 Page:290 ),为了避免主线程退出,造成新创建的线程未能执行完,整个进程就退出,因此在主线程中使用了 sleep(1) 函数,
这一点我能明白。但是,假如现在我将 sleep(1)注释掉,执行编译出的结果时,会出现三种情况
1.主线程执行完毕,直接退出,新创建的线程未能执行完,只打印出主线程的信息;
2.主线程和新线程都执行完毕,两个线程的信息都打印出来了;
以上两种情况,我都能理解
3.除了打印出第2种情况的信息以外,新创建的线程的信息会再次打印一遍
搞不懂这是为什么?望高人出来指点指点
代码贴出来
复制代码
gcc编译时需加上 "-lpthread"
问题是这样的:
按照书上所说(APUE(第2版) 中文版 Page:290 ),为了避免主线程退出,造成新创建的线程未能执行完,整个进程就退出,因此在主线程中使用了 sleep(1) 函数,
这一点我能明白。但是,假如现在我将 sleep(1)注释掉,执行编译出的结果时,会出现三种情况
1.主线程执行完毕,直接退出,新创建的线程未能执行完,只打印出主线程的信息;
2.主线程和新线程都执行完毕,两个线程的信息都打印出来了;
以上两种情况,我都能理解
3.除了打印出第2种情况的信息以外,新创建的线程的信息会再次打印一遍
搞不懂这是为什么?望高人出来指点指点
代码贴出来
- #include <pthread.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
-
- pthread_t ntid;
-
- void
- printids(const char *s)
- {
- pid_t pid;
- pthread_t tid;
-
- pid = getpid();
- tid = pthread_self();
-
- printf("%s pid %u tid %u (0x%x)\n", s, (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);
- }
-
- void *
- thr_fn(void *arg)
- {
- printids("new thread: ");
- return((void *)0);
- }
-
- int
- main(void)
- {
- int err;
-
-
- err = pthread_create(&ntid, NULL, thr_fn, NULL);
- if(err != 0)
- printf("can't create thread : %s\n", strerror(err)); //这里没有使用书上的由作者定义的出错函数
-
- printids("main thread:");
- // sleep(1); //故意注释了原来的代码
- exit(0);
- }
作者: tanggula2007 发布时间: 2010-08-19
好像我运行了很多次都没有子线程运行2次的啊~
作者: liexusong 发布时间: 2010-08-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28