[t:/]$ 지식_

pthread_join 으로 return 변수 받을 때 주의사항

2013/07/04

쓰레드 본체의 원형은 이렇다.

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 등을 쓰지 않고 쓰레드가 끝나면, 메모리 릭 난다.









[t:/] is not "technology - root". dawnsea, rss