pthread 함수정리

프로그래밍/C/C++ 2014. 1. 31. 19:39

안드로이드 NDK(리눅스 커널)에서 pthread를 지원한다고 한다.

단일 프로세스에서 동시에 여러작업을 하는것처럼 보여지기위해 스레드를 사용한다.

pthread API 함수를 쓰기 위해서 #include <pthread.h>를 해야한다.

또한 컴파일시 -lpthread 옵션 추가를 해주어야 한다.(미추가시 컴파일 오류 혹은 스레드가 정상으로 작동하지 않음)

 

pthread_t  :  pthread의 자료형을 나타낸다.

 

1. pthread 생성 

int pthread_create(pthread_t *th_id, const pthread_attr_t *attr, void *함수명, void *arg)

 첫번째 인자 : pthread 식별자(thread가 생성되면 thread식별자 값이 주어진다.)

 두번째 인자 : pthread 속성(옵션), 기본적인 thread를 사용할경우 NULL로 설정

 세번째 인자 : pthread 분기함수, 반환값이 void* 타입이고 매개변수도 void* 으로 선언된 함수만 사용할수있다.

                     예) void *threadFunc(void *arg)

 네번째 인자 : 분기할 함수로 넘겨줄 인자값. 어떤 자료형을 넘겨줄 지 모르기 때문에 void 형으로 넘겨주고, 상황에 맞게

                     분기하는 함수 내에서 원래의 자료형으로 캐스팅해서 사용하면 된다.

 ▶ 성공적으로 pthread가 생성된 경우 0을 리턴

 

2. pthread 옵션

int pthread_join(pthread_t th_id, void **thread_return)

 - 특정 pthread가 종료될 때까지 기다리다가 pthread가 종료시 자원 해제

 첫번째 인자 : pthread를 기다릴 id

 두번째 인자 : pthread의 return값(포인터로 받아와야함)

 

int pthread_detach(pthread_t th_id)

 - th_id 식별자를 가지는 pthread가 부모 pthread로 부터 독립한다.

   (pthread_join(..)이 없어도 종료시 자동으로 리소스가  해제됨)

 

void pthread_exit(void *ret_value)

 - 현재 실행중인 thread를 종료시킨다. pthread_exit가 호출되면 cleanup handler가 호출되며 리소스 해제하는 일을 수행

 

void pthread_cleanup_push(void *함수명, void *arg)

 - pthread(exit)가 호출될때 호출된 handler를 정하는 함수(자원 해제용이나 mutex lock해제를 위한 용도로 사용)

 

void pthread_cleanup_pop(int exec)

 - 설정된 cleanup handler를 제거하기 위해서 사용하는 함수(exec 값이 0일 경우 바로 cleanup handler 제거하고 그 외

    의 값을 가질 경우 cleanup handler를 한번 실행한 후 제거한다)

 

pthread_t pthread_self()

 - 현재 동작중인 pthread의 식별자를 리턴.