Multithreading Can';t从线程传递局部变量
我制作了一个线程thread1,它创建了另一个线程thread2。当我尝试使用pthread_exit从thread2向thread1传递fd(在thread2内声明的fd)的值时,我在retval中得到一个垃圾值。但当我将fd声明为全局变量时,我在retval中得到了正确的值。我得到的答案是,这是因为线程已完成,因此无法传递值。但是对于函数,局部变量的作用域也被限制在函数内部,并且它们确实返回值。那么为什么线不能做到这一点呢 以下是我尝试的代码:Multithreading Can';t从线程传递局部变量,multithreading,pthreads,parameter-passing,Multithreading,Pthreads,Parameter Passing,我制作了一个线程thread1,它创建了另一个线程thread2。当我尝试使用pthread_exit从thread2向thread1传递fd(在thread2内声明的fd)的值时,我在retval中得到一个垃圾值。但当我将fd声明为全局变量时,我在retval中得到了正确的值。我得到的答案是,这是因为线程已完成,因此无法传递值。但是对于函数,局部变量的作用域也被限制在函数内部,并且它们确实返回值。那么为什么线不能做到这一点呢 以下是我尝试的代码: void *thread2(void
void *thread2(void *message)
{
int fd;
void *retval;
fd=open(message,O_RDWR);
printf("message is - %s",(char *)message);
pthread_exit(&fd);
}
void *thread1(void *message)
{
void *retval;
pthread_t *tid2;
tido=malloc(sizeof(pthread_t));
pthread_create(tid2,NULL,thread2,message);
pthread_join(*tid2,&retval);
printf("fd in write is-%d\n",*(int *)retval);
pthread_exit(&retval);
}
嗯。。。您的
int fd
是一个自动变量(我们可以假设它在堆栈上),因此当thread2()
返回时,它超出了范围,因此从函数中传递指向fd
的指针可能会导致失望
函数可以返回自动(也称为局部)变量的值。它不能做的是返回一个人的地址(无论如何,不是和工作)
您所能做的是构造一个结构,将其传递到thread2()
,将参数带入并返回结果