为什么线程在共享局部变量时本身具有堆栈?

时间:2018-12-16 22:46:54

标签: c multithreading

根据我目前的理解:

  1. 每个线程都有自己的堆栈
  2. 对于int a中的局部变量main(),它在main()的堆栈中
  3. main()中创建线程后,他们都可以访问相同的a。等一下...?

我的推理有什么问题...

我可能不应该猜测,但这是它:从线程的角度来看,父堆栈似乎是...全局的?

(我知道以前可能会问这个问题,但我找不到确切的解释此问题的人)

1 个答案:

答案 0 :(得分:0)

函数内部的变量称为局部变量。

void function_1(){ int a,b;}

A 和 B 只能在该函数内部使用。函数调用后,变量会被销毁。

下一个例子:

#include<stdio.h>    
int main()
{
    int a = 100;    
    {
        /*  variable a declared in this block is
            completely different from variable
            declared outside.  */
        int a = 10;  
        printf("Inner a = %d\n", a);
    }    
    printf("Outer a = %d\n", a);    
    // signal to operating system everything works fine
    return 0;
}

a 可以在 main() 中使用

全局变量:

#include<stdio.h>
void func_1();
int a, b = 10;  // declaring and initializing global variables
int main()
{
    printf("Global a = %d\n", a);
    printf("Global b = %d\n\n", b);

    func_1();

    // signal to operating system program ran fine
    return 0;
}
void func_1()
{
    printf("From func_1() Global a = %d\n", a);
    printf("From func_1() Global b = %d\n\n", b);
}

A 和 B 可以在 main() 和 func_1() 中使用。