쓰레드 본체의 원형은 이렇다.
void *mythread(void *param)
{
return (void *)p;
}
이때 p는 지역 변수를 가리키면 안 된다.지역 변수는 스택을 쓴다. pthread_join 으로 리턴을 받으면 스택이 먼저 깨지는 것 같다.
따라서 전역 변수나 힙에 있는 값을 전달하는 것이 안전한 듯.
즉,
int ret;
void *mythread(void *param)
{
int *p;
p = &ret
*p = 1234;
return (void *)p;
}
이래야 됨. 받는 측에서는..
void *rp;
tid = pthread_create(&thread_id, NULL, mythread, NULL);
pthread_join(thread_id, &rp); // 원형이 이중 포인터임을 주의해야 함.
printf(“ret = %d\n”, *(int *)rp);
phtread_join이나 pthread_detach 등을 쓰지 않고 쓰레드가 끝나면, 메모리 릭 난다.