linux/android thread test

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

不多说上代码:

#include
#include
#include
#include

void *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退出而被系统清理的状况。

你可能感兴趣的:(Linux,service,android,c++)