2014-07-20 4 views
0

스레드를 만들었습니다. 스레드 1 다른 스레드를 만듭니다. 스레드 2. 내가 FD의 값을 전달하려고 할 때 내가 RETVAL에 쓰레기 값을 가져 thread1thread2에서가 pthread_exit를 사용하여 (FD thread2 내에서 선언). 그러나 fd를 전역 변수로 선언하면 retool에 올바른 값을 얻습니다. 스레드가 완료되어 값을 전달할 수 없기 때문에 이것이 답이라고 대답했습니다. 그러나 함수의 경우에는 지역 변수의 범위가 함수 내에서 제한되어 반환 값을 반환합니다. 그렇다면 왜 스레드가 그렇게 할 수 없습니까? 그렇게 할 때 thread2() 반환, 그래서 범위를 벗어나,스레드에서 로컬 변수를 전달할 수 없습니다.

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); 
    } 

답변

1

음을 ... 당신의 int fd은 (우리가 스택에 가정 할 수있다) 자동 변수는 다음과 같습니다

내가 노력 코드입니다 함수에서 fd에 대한 포인터를 전달하면 아마도 실망으로 이어질 것입니다.

함수는 자동 (일명 로컬) 변수의 값을 반환 할 수 있습니다. 그것이 할 수없는 일은 하나의 주소를 반환하는 것입니다 (어쨌든,하지 않고 일합니다).

당신이 할 수있는 일은 구조체를 구성하여 thread2()에 전달하여 매개 변수와 결과를 다시 전달하는 것입니다.

관련 문제