Thread的堆栈地址和主进程

时间:2013-06-12 17:51:47

标签: process pthreads

我有一个与线程和进程的内存地址有关的问题。问题是:- 在正常的电话中,如

int func(int a, int b){
    int c;
    c = a + b;
    return c;
}         

int main(){
    int ret = func(a,b);
     return 0;
}

在函数func的上述函数调用中,函数变量a和b将存储在堆栈中。如果我错了,请纠正我。

现在另一种情况是我们从主进程创建线程。

void * func(void *dummy_ptr){
    int c;
    c = a + b;
    pthread_exit();
}         

int main(){
    pthread_t  id;
    int ret = pthread_create(&id, NULL, & func(), NULL);
    return 0;
}

我的问题是pthread_create的变量将被存储的位置。它是存储在主堆栈上还是存储在线程堆栈上。

2 个答案:

答案 0 :(得分:1)

pthread_create为堆中新线程的堆栈分配空间。因此func中的变量存储在线程的堆栈中,该堆栈本身位于程序的堆中。

答案 1 :(得分:0)

变量pthread_t id是main的本地变量,因此必须在main的堆栈上创建。

main完成执行时,

  • pthread_join中没有main等待线程终止。
  • 线程没有分离。

main退出导致所有其他线程abrubtly终止(kill)。