development
C language: pthread_create에서 start_routine의 warning
주먹불끈
2021. 8. 31. 17:22
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;
}
반응형