반응형

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


반응형
블로그 이미지

cocy

조금은 가볍게! 시작은 새롭게!

,