1. 기본 쓰레드 함수
(1) pthreard_create
쓰레드 생성을 위해 사용(pthread_t)
첫번째 인자는 쓰레드 식별자
세번째 인자는 쓰레드 실행시 호출되는 함수
네번째 인자는 그 함수의 인자
리턴값은 쓰레드 ID
실행된 쓰레드에 대해서는 pthread_join 등의 함수를 이용해서 쓰레드 종료 때까지 기다려줘야 한다. pthread_join은 일종의 fork의 wait와 비슷하게 동작하며, 쓰레드 자원을 해제시켜 준다.
ex) thr_id = pthread_create(&p_thread[1], NULL, t_function, (void *)&a);
(2) pthread_join
첫번째 인자는 기다릴(join)할 쓰레드 식별자
두번째 인자는 쓰레드의 return값
두번째 인자가 NULL이 아닐 경우 해당 포인터로 쓰레드 return값을 받아올 수 있다.
ex) pthread_join(p_thread, (void *)&status);
(3) pthread_detach
detach는 "떼어내다"라는 뜻을 가지며, main 쓰레드에서 pthread_create를 이용해 생성된 쓰레드를 분리시킨다.
이 함수는 식별번호(첫번째 인자)인 쓰레드를 detach시키는데, detach 되었을 경우, 해당(detach)된 쓰레드가 종료될 경우 pthread_join을 호출하지 않더라도 즉시 모든 자원이 해제(free) 된다.
detach를 하지 않을 경우, 쓰레드 함수가 종료되더라도 자원이 해제되지 않는다.
pthread_create 호출 후 detach할 수 도 있고, pthread_create 호출시에 쓰레드가 detach 되도록 할 수도 있다.(pthread_attr_setdetachstate 참조)
ex) pthread_detach(p_thread);
(4) pthread_exit
현재 실행 중인 쓰레드를 종료시키고자 할 때 사용한다.
pthread_cleanup_push가 정의되어 있다면, pthread_exit가 호출될 경우 cleanup handler가 호출된다. 보통 이 cleanup handler는 메모리를 정리하는 등의 일을 하게 된다.
ex) pthread_exit(0);
(5) pthread_cleanup_push
cleanup handler를 인스톨하기 위해서 사용된다.
pthread_exit가 호출되어서 쓰레드가 종료될 때 pthread_cleanup_push에 의해서 인스톨된 함수가 호출된다.
첫번째 인자가 쓰레드가 종료될 때 호출되는 함수이다.
두번째 인자는 이 때의 아규먼트이다.
cleanup handler는 주로 자원을 돌려주거나, mutex 잠금등의 해제를 위한 용도로 사용된다. 만약 mutex 영역에서 pthread_exit가 호출되어 버릴 경우, 다른 쓰레드에서 영원히 block 될 수 있기 때문이다.
또, malloc 으로 할당받은 메모리, 열린 파일지정자를 닫기 위해서도 사용한다.
ex) phread_cleanup_push(cleanup, (void *)&a);
(6) pthread_cleanup_pop
pthread_cleanup_push와 함께 사용되며, cleanup handler를 제거하기 위해서 사용된다.
pthread_cleanup_push와 pthread_cleanup_pop은 반드시 같은 함수 내의 같은 레벨의 블럭에서 한 쌍으로 사용해야 한다.
(7) pthread_self
pthread_self를 호출하는 현재 쓰레드의 쓰레드 식별자를 리턴한다.
ex) ptread_t id; id = pthread_self();
2. 쓰레드 동기화 함수
(1) pthread_mutex_init
(2) pthread_mutex_distroy
(3) pthread_mutex_lock
(4) pthread_mutex_unlock
(5) pthread_cond_init
(6) pthread_cond_signal
(7) pthread_cond_boradcast
(8) pthread_cond_wait
(9) pthread_cond_timewait
(10) pthread_cond_destroy
(11) 예제 코드
3. Thread Attribute 함수
(1) pthread_attr_init
(2) pthread_attr_distroy
(3) pthread_attr_getscope
(4) pthread_attr_setscope
4. 쓰레드 시그널 관련
(1) pthread_sigmask
(2) pthread_kill
(3) sigwait
5. 쓰레드 취소
(1) pthread_cancel
(2) pthread_setcancelstate
(3) pthread_getcancelstate
'코드자료실 > linux / c' 카테고리의 다른 글
[리눅스] time 명령어 - 실행시간 측정 (0) | 2013.01.07 |
---|---|
[리눅스, c] vi 에디터 사용법 (0) | 2013.01.07 |