linux/android thread test
16lz
2021-01-24
对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退出而被系统清理的状况。
更多相关文章
- Android(安卓)AsyncTask 完美解析 看不懂源码你就输了
- Android(安卓)远程回调
- 《Android应用开发揭秘》读者问题汇总
- 安卓中使用ThreadPoolExcutor
- Android面试题目(10) 内存泄露
- Android(安卓)认识EventBus到原理解析
- Android(安卓)JVM的运行过程
- Android(安卓)定时服务
- android 快速创建一个新的线程