我在这样的一个函数中声明了一些局部变量:
void* thread_function (void* parameter)
{
struct parameter * thread_data = (struct parameter *)parameter;
char buffer[20];
int temp;
}
在这里,如果我创建了两个线程,然后在一个线程中更新了buffer&temp,那么它将影响其他线程吗?
我的意思是,如果有两个线程,那么所有局部变量都将有两个副本吗?
编辑:那么在这种情况下,我需要使用线程特定的数据。我的意思是pthread_setspecific和所有这样的东西
这些变量在堆栈上分配,并且每个线程都有自己的堆栈:这些变量是每个线程专用的(它们不共享)。(有关更多详细信息,请参见此答案。)
例如,如果将thread_data分配给全局指针,则其他线程将能够通过全局指针访问thread_data。
特定于线程的数据(例如pthread_setspecific)用于创建全局变量,但仍特定于每个线程(不共享):它们是特定于线程的全局变量。
当您需要全局变量,但又不想在线程之间共享它们时,需要使用特定于线程的变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句