티스토리 뷰

Linux

pthread에 여러 인자 전달하기

hehpollon 2016.11.14 01:50

pthread_create는 다음과 같이 이루어져 있습니다.

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

여기서 void *arg 인자로 pthread에 인자를 넘겨주게 됩니다.

이 인자를 사용하여 여러 인자를 넘겨줄 수 있는데 그 방법은 바로 struct를 이용하는 것 입니다.

a, b 두 값을 넘기고 싶다고 하면, 

struct MultipleArg
{
  int a;
  int b;
};


위와같이 구조체를 만들어 줍니다.

MultipleArg *multiple_arg;
multiple_arg = (MultipleArg *)malloc(sizeof(MultipleArg));
multiple_arg->a = 1;
multiple_arg->b = 2;

pthread_create(&mthread, NULL, mfunc, (void *) multiple_arg);


이런 형식으로 구조체를 (void *) 로 캐스팅 해서 넘겨주면 됩니다.

그 후 mfunc에서는

void *mfunc(void *multiple_arg) {
    MultipleArg *my_multiple_arg = (MultipleArg *)multiple_arg;
    printf("a: %d b: %d\n", my_multiple_arg->a, my_multiple_arg->b);
}


와 같이 void * 로 넘어온 인자를 MultipleArg * 로 캐스팅 시켜서 사용하면 됩니다.



신고
댓글
댓글쓰기 폼