gpt4 book ai didi

c - 线程函数中的局部变量是否根据线程有单独的副本?

转载 作者:IT王子 更新时间:2023-10-28 23:58:05 25 4
gpt4 key购买 nike

我在一个函数中声明了一些局部变量,如下所示:

void* thread_function (void* parameter)
{
struct parameter * thread_data = (struct parameter *)parameter;
char buffer[20];
int temp;
}

在这里,如果我创建了两个线程,那么在一个线程中,如果更新了缓冲区和临时文件,那么它会影响其他线程吗?

我的意思是,如果有两个线程,那么所有局部变量是否会有两个副本?

编辑:那么在这种情况下我需要使用线程特定数据。?我的意思是 pthread_setspecific 和所有这些东西

最佳答案

这些变量分配在栈上,每个线程都有自己的栈:这些变量是每个线程私有(private)的(不共享)。 (有关详细信息,请参阅 this answer。)

例如,如果您将 thread_data 分配给全局指针,其他线程将能够通过全局指针访问 thread_data。

线程特定数据(例如 pthread_setspecific)用于创建全局变量,但仍特定于每个线程(不共享):它们是线程特定的全局变量。

当您需要全局变量但又不想在线程之间共享它们时,您需要使用线程特定变量。

关于c - 线程函数中的局部变量是否根据线程有单独的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com