线程如何知道共享变量的地址

时间:2014-10-20 16:14:01

标签: c multithreading

我不熟悉C中的多线程,并且想知道函数中声明的共享(非全局和非静态)变量如何在线程之间共享。我知道我们可以声明两个简单的变量,如

int a;

或像

这样的动态
a = (int *)malloc(sizeof(int));

用于共享数据。但是,我不清楚的是编译器在每种情况下的行为如何?

1)它是否将其线程堆栈内创建的变量的地址提供给其他线程或什么?

2)动态分配变量怎么样?它的指针是否播出?或者指针保存在.DATA或.BSS ??

提前致谢

1 个答案:

答案 0 :(得分:1)

如何声明变量以及如何在线程中处理它并不是编译器所关心的。决定如何分配它是你的工作。

例如,如果您在堆栈上分配了int a,那么您需要确保该变量将在访问它的任何线程的生命周期内存活。这通常意味着在变量超出范围之前连接任何线程。

如果在堆上分配变量,则线程可以访问变量,而不必担心内存超出范围。但是,您需要决定如何释放malloc分配的内存。一个线程需要成为内存的“所有者”并对其进行free调用,否则会导致内存泄漏。

将指针传递给线程将根据您使用的平台和线程库而有所不同。但是,它们都允许您传递某种参数,通常是void*例如,pthread_create的第4个参数允许您将指针传递给线程函数。