Multithreading Can';t从线程传递局部变量

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

我制作了一个线程thread1,它创建了另一个线程thread2。当我尝试使用pthread_exit从thread2向thread1传递fd(在thread2内声明的fd)的值时,我在retval中得到一个垃圾值。但当我将fd声明为全局变量时,我在retval中得到了正确的值。我得到的答案是,这是因为线程已完成,因此无法传递值。但是对于函数,局部变量的作用域也被限制在函数内部,并且它们确实返回值。那么为什么线不能做到这一点呢

以下是我尝试的代码:

    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()
,将参数带入并返回结果