2010년 4월 3일 토요일

pthread 사용하기

< pthread 사용하기 >

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



댓글 없음:

댓글 쓰기