스레드를 만들었습니다. 스레드 1 다른 스레드를 만듭니다. 스레드 2. 내가 FD의 값을 전달하려고 할 때 내가 RETVAL에 쓰레기 값을 가져 thread1에 thread2에서가 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);
}