我不熟悉C中的多线程,并且想知道函数中声明的共享(非全局和非静态)变量如何在线程之间共享。我知道我们可以声明两个简单的变量,如
int a;
或像
这样的动态a = (int *)malloc(sizeof(int));
用于共享数据。但是,我不清楚的是编译器在每种情况下的行为如何?
1)它是否将其线程堆栈内创建的变量的地址提供给其他线程或什么?
2)动态分配变量怎么样?它的指针是否播出?或者指针保存在.DATA或.BSS ??
中提前致谢
答案 0 :(得分:1)
如何声明变量以及如何在线程中处理它并不是编译器所关心的。决定如何分配它是你的工作。
例如,如果您在堆栈上分配了int a
,那么您需要确保该变量将在访问它的任何线程的生命周期内存活。这通常意味着在变量超出范围之前连接任何线程。
如果在堆上分配变量,则线程可以访问变量,而不必担心内存超出范围。但是,您需要决定如何释放malloc
分配的内存。一个线程需要成为内存的“所有者”并对其进行free
调用,否则会导致内存泄漏。
将指针传递给线程将根据您使用的平台和线程库而有所不同。但是,它们都允许您传递某种参数,通常是void*
例如,pthread_create的第4个参数允许您将指针传递给线程函数。