线程函数中的局部变量是否具有根据线程的separe副本?
发布时间:2020-12-16 03:05:45 所属栏目:百科 来源:网络整理
导读:我已经在一个函数中声明了一些局部变量: void* thread_function (void* parameter){ struct parameter * thread_data = (struct parameter *)parameter; char buffer[20]; int temp;} 这里如果我创建了两个线程,那么在一个线程中,如果缓冲区 temp是否更新会
我已经在一个函数中声明了一些局部变量:
void* thread_function (void* parameter) { struct parameter * thread_data = (struct parameter *)parameter; char buffer[20]; int temp; } 这里如果我创建了两个线程,那么在一个线程中,如果缓冲区& temp是否更新会影响其他线程? 我的意思是如果有两个线程,那么会有两个副本的所有局部变量? 编辑:那么在这种情况下我需要使用线程特定的数据.我的意思是pthread_setspecific&所有这些东西 解决方法
这些变量分配在堆栈上,每个线程都有自己的堆栈:这些变量对每个线程都是私有的(它们不是共享的). (详见
this answer)
例如,如果将thread_data分配给全局指针,则其他线程将能够通过全局指针访问thread_data. 线程特定数据(例如pthread_setspecific)用于创建全局变量,但仍对每个线程(非共享)特定的变量:它们是线程专用的全局变量. 当需要全局变量时,您需要使用特定于线程的变量,但不希望在线程之间共享它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |