线程吧 关注:38贴子:569
  • 0回复贴,共1

线程的生命周期

只看楼主收藏回复

大佬们,我想了解一下一个线程什么时候会销毁,所以做了下述的试验的,但是有几个问题请教,代码个结果如下:
#include <stdio.h>
#include <pthread.h>
pthread_t th1_id;
pthread_t th2_id;
int* p = NULL;
void th2(void){
while(1){
printf("thread2 running %d %x\r\n", (*p)++, p);
sleep(1);
}
}
void th1(void *arg){
p = (int*)arg;
printf("thread1 running %d %x\r\n", (*p)++, p);
pthread_create(&th2_id, NULL, (void*)th2, NULL);
}
void func(){
int a = 0;
printf("func id %x &a = %x, a = %d\r\n", &th1_id, &a, a);
pthread_create(&th1_id, NULL, (void*)th1, (void*)&a);
printf("-----\r\n");
}
void f1(){
int a = 20;
printf("f1 &a = %x %d\r\n", &a, a);
sleep(2);
}
void f2(){
int a = 30;
while(1){
printf("f2 a = %d &a = %x \r\n", a, &a);
sleep(1);
}
}
int main (int argc, char **argv)
{
func();
f1();
f2();
return (0);
}

问题1:无论是函数创建的线程还是线程创建的线程,都不会随着函数或是线程的结束而销毁,只有进程结束,才会销毁所有的线程是吗?
问题2:函数的局部变量结束后会回收,将函数的局部变量的地址作为线程的参数是不是不规范,会有问题
问题3:图中的f1函数和func函数中创建的变量a的地址都是36e24680,但是f2中a的地址为啥是36e24670呢?func函数的栈空间回收了,所以f1中a的地址跟func中的一样,但是f1结束它的栈空间没有回收吗


IP属地:河南1楼2024-08-08 10:59回复