对linux应用空间线程和子线程的理解----基于测试

不多说上代码:

#include#include#include#includevoid *thread2(void *arg);void *thread1(void *arg){pthread_t p2=NULL;printf("thread 1\n");pthread_create(&p2, NULL, thread2,(char*)"thread2");//sleep(1);}void *thread2(void *arg){        while(1){printf("thread 2\n");sleep(1);}}int mian(argc,argv[]){pthread_t pt=NULL;pthread_create(&pt, NULL, thread1, (char*)"thread1");//sleep(10); //该句很重要}

首先把主线程中sleep一句去掉。运行结果如下:
xxx01@xxx01:~/testcplus$ ./testcplus
xxx01@xxx01:~/testcplus$
没反应,我就纳闷了,两个子线程咋不动呢,没反应。
分析:主线程退出了,子线程全部没来得及运行就被系统结束释放了。
所以这时候pthread_join()才显示出它的价值,这里就不罗嗦了。

再把主线程那个sleep给他加上:
xxx01@xxx01:~/testcplus$ ./testcplus
thread 1
thread 2
thread 2
thread 2
thread 2
thread 2
thread 2
thread 2
thread 2
thread 2
thread 2
都跑了,证明上文分析是正确的。还有一个疑问:
按照代码看来thread2是thread1建立的,是不是thread2是thread1的子线程呢?是不是thread2会因为thread1的立刻退出而没有运行机会呢?
运行结果很明显,不是这样的,thread2会一直运行到主线程退出。
得出一个可疑的结论:在linux应用空间,只有主线程和一众子线程两级,在一个主线程中,不论创建多少子线程,不论子线程再创建线程,所有子创建出来的线程都一视同仁,不会发生我上面疑问中的情况,thread2因为创建它的子线程thread1退出而被系统清理的状况。

更多相关文章

  1. Android(安卓)AsyncTask 完美解析 看不懂源码你就输了
  2. Android(安卓)远程回调
  3. 《Android应用开发揭秘》读者问题汇总
  4. 安卓中使用ThreadPoolExcutor
  5. Android面试题目(10) 内存泄露
  6. Android(安卓)认识EventBus到原理解析
  7. Android(安卓)JVM的运行过程
  8. Android(安卓)定时服务
  9. android 快速创建一个新的线程

随机推荐

  1. Android Studio 查看Android内部隐藏源码
  2. Android实践 -- 设置系统日期时间和时区
  3. android PopupWindow实现从底部弹出或滑
  4. Unity3d Android SDK接入解析(一)Unity3d
  5. 百度android技术要求
  6. Android菜鸟日记4
  7. 2011.08.15(3)——— android SeekBar 无法
  8. 配置PhoneGap开发Android应用环境入门
  9. Android logcat使用详解
  10. 设置android:supportsRtl="true"无效问题