Thread
Process vs. Thread
multiProcess
multiThread
다른점
함수 원형.
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
기능. 쓰레드를 생성한다.
헤더.<pthread.h>
매개변수1.pthread_t *thread
쓰레드가 성공적으로 생성되었을 때, 넘겨주는 쓰레드 식별번호
매개변수2.const pthread_attr_t *attr
쓰레드 속성 타입 (기본 NULL)
매개변수3.void *(*start_routine)
분기시켜서 실행할 쓰레드 함수
매개변수4.void *arg
위 start_routine 쓰레드 함수를 실행시킬 때 넘겨줄 인자
리턴값.0
성공,errno
에러
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
pthread_attr_t attr;
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); //JOINABLE 상태로 변경
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); //DETACHED 상태로 변경
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
함수 원형.
int pthread_join(pthread_t thread, void **return_val)
기능. 특정 쓰레드의 종료를 기다린다.
join된 쓰레드(종료된 쓰레드)는 모든 자원을 반납하게 된다.
헤더.<pthread.h>
매개변수1.pthread_t thread
기다릴 쓰레드의 식별자
매개변수2.void **return_val
쓰레드의 리턴값. NULL이 아닌 경우, pthread_exit() 함수를 통해 설정한 값을 확인할 수 있다.
리턴값.0
성공,errno
에러
- pthread_join()은 반드시 joinable한 상태로 생성된 쓰레드만을 기다릴 수 있다.
- 다만 쓰레드가 detach 없이 종료되면 쓰레드 스택은 해제되지만, 쓰레드 ID와 종료 상태를 포함한 몇몇 자원들은 pthread_join()이나 pthread_detach()에 의해 해제될 때까지 남아있게 된다.
- 종료될 때까지 기다렸다가 종료시점이 되면, 자원이 반납된다.
함수 원형.
int pthread_detach(pthread_t thread)
기능. 쓰레드가 종료하면, 할당된 모든 자원이 즉시 반환된다. (반면, 쓰레드의 종료 상태를 알 수 없다.)
헤더.<pthread.h>
매개변수1.pthread_t thread
분리시킬 쓰레드의 식별자
리턴값.0
성공,errno
에러
- 쓰레드의 종료 상태를 알아내는게 중요하다면, 종료 상태를 저장할 전역변수에 종료 상태를 기록하면 된다. 쓰레드가 종료할 때 변수의 값을 바꾸고, 메인 쓰레드에 시그널을 전송하는 방법이다.
함수 원형.
void pthread_exit(void *return_val)
기능. 스레드 종료
헤더.<pthread.h>
매개변수.void *return_val
pthread_join()을 호출하는 다른 쓰레드에서 받아서 사용할 수 있다.
함수 원형.
pthread_t pthread_self(void)
기능. pthread_t 구조체는 현재 쓰레드의 식별자 정보를 담고있다. 따라서 현재 쓰레드 식별자를 확인할 수 있다.
헤더.<pthread.h>
리턴값.pthread_t
현재 쓰레드의 식별자 정보
함수 원형.
int pthread_cancel(pthread_t thread)
기능. 쓰레드에 취소 요청을 한다. (강제로 종료되지는 않음)
취소 요청을 받아서 종료하는 쓰레드는 pthread_exit(PTHREAD_CANCELED)을 호출하고 종료한다. 취소가 통보된 쓰레드는 쓰레드 취소 상태의 설정에 따라서 취소 요청을 무시할 수도, 취소 지점까지 수행한 뒤에 종료될 수도 있다. (취소 상태는pthread_setcancelstate(int state, int *oldstate)
함수에 의해 결정된다.)'
헤더.<pthread.h>
매개변수.pthread_t thread
인자로 주어진 쓰레드를 중지시킨다.
리턴값.0
성공,0이 아닌 수
에러
작업 중간에 취소 요청을 받았다면, 쓰레드는 마지막까지 진행할 수 없기 때문에, 이 경우를 대비해서pthread_cleanup_push()
pthread_cleanup_pop()
과 같은 함수를 제공한다. (종료할 때 호출해야할 함수)