티스토리 뷰

Photo by K15 Photos on Unsplash

 

쓰레드를 생성하는 pthread_create() 함수 시그니처는 아래와 같다.
 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
	void *(*start_routine)(void *), void *arg);

 

그런데 빌드시에 파라미터로 들어가는 start_routine() 함수에서 warning 뜬다.

분명 리턴값이 void 인데 warning 뜰까?

 

warning: Control reaches end of non-void function [-Wreturn-type]

 

별거 아니다. 쓰레드 함수의 리턴값은 아래와 같이 해주어야 한다.

 

pthread_exit(NULL);

 

 

참고 stack overflow 링크와 코드를 아래에 덧붙인다.

stack overflow: https://stackoverflow.com/a/20031237/3382699

 

typedef struct thread_data {
   int a;
   int b;
   int result;

} thread_data;

void *myThread(void *arg)
{
   thread_data *tdata=(thread_data *)arg;

   int a=tdata->a;
   int b=tdata->b;
   int result=a+b;

   tdata->result=result;
   pthread_exit(NULL);
}

int main()
{
   pthread_t tid;
   thread_data tdata;

   tdata.a=10;
   tdata.b=32;

   pthread_create(&tid, NULL, myThread, (void *)&tdata);
   pthread_join(tid, NULL);
   printf("%d + %d = %d\n", tdata.a, tdata.b, tdata.result);  
   return 0;
}
반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함