gpt4 book ai didi

multithreading - 线程函数如何访问父线程的变量

转载 作者:行者123 更新时间:2023-12-04 06:44:32 25 4
gpt4 key购买 nike

我读到线程共享其父线程的内存地址空间。
如果这是真的,为什么线程函数不能访问属于它的父线程的局部变量?

void* PrintVar(void* arg){
printf( "%d\n", a);
}

int main(int argc, char*argv[]) {
int a;
a = 10;
pthread_t thr;
pthread_create( &thr, NULL, PrintVar, NULL );

}

如果线程共享地址空间,那么函数 PrintVar 应该能够打印 variable a 的值。 , 对 ?

我在 http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html 上阅读了这条信息

同一进程中的线程共享:
工艺说明
大多数数据
打开文件(描述符)
信号和信号处理程序
当前工作目录
用户和组 ID

如果这是真的,那么为什么 int a不符合共享变量的条件?

我想查看共享文件描述符的示例代码

最佳答案

子线程可以访问父线程堆栈中的变量,它只需要知道变量的地址。例如,你可以这样做:

void* PrintVar(void* arg){
int * a = (int *) arg;
printf( "%d\n", *a);
}

int main(int argc, char*argv[]) {
int a;
a = 10;
pthread_t thr;
pthread_create( &thr, NULL, PrintVar, &a );
}

请注意,这类事情可能很棘手,因为您必须(以一种或另一种方式)保证 (a) 在子线程仍在访问它时不会被破坏。 (在这种情况下,您可能希望在 main() 的末尾调用 pthread_join(),这样主线程将在那里阻塞并且在子线程退出之前不会从 main() 返回)

关于multithreading - 线程函数如何访问父线程的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952092/

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