PTHREAD
POSIX Thread(약어 PThread)는 유닉스 계열 시스템에서 일반적으로 사용하는 스레드 관련 표준 API이다.
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
스레드 생성을 위해서 사용한다.
- 첫번째 argument인 thread 는 스레드가 성공적으로 생성되었을때 생성된 스레드를 식별하기 위해서 사용되는 스레드 식별자이다.
- 두번째 argument인 attr 은 스레드 특성을 지정하기 위해서 사용하며, 기본 스레드 특성을 이용하고자 할 경우에 NULL 을 사용한다.
- 세번째 argument인 start_routine는 분기시켜서 실행할 스레드 함수이며,
- 네번째 argument인 arg는 스레드 함수의 인자이다.
성공적으로 생성될경우 0을 리턴한다.
int pthread_join(pthread_t th, void **thread_return);
: 첫번째 argument인 th는 기다릴(join)할 스레드 식별자이며, 두번째 argument thread_return은 스레드의 리턴(return) 값이다. thread_return 이 NULL 이 아닐경우 해다 포인터로 스레드 리턴 값을 받아올수 있다.
int pthread_detach(pthread_t th);
: detach 는 “떼어내다” 라는 뜻을 가지며 main 스레드에서 pthread_create를 이용해 생성된 스레드를 분리시킨다. 이 함수는 식별자인 th는 스레드를 detach 시키는데, detach 되었을경우 해당(detach 된) 스레드가 종료될경우 pthread_join 을 호출하지 않더라도 즉시 모든 자원이 해제(free) 된다.
void pthread_exit(void *retval);
: pthread_exit는 현재 실행중인 스레드를 종료시키고자 할때 사용한다. 만약 pthread_cleanup_push가 정의되어 있다면, pthread_exit가 호출될경우 cleanup handler가 호출된다. 보통 이 cleanup handler은 메모리를 정리하는 등의 일을 하게 된다.
void pthrad_cleanup_push(void (*routine) (void *), void *arg);
: 이것은 cleanup handlers를 인스톨하기 위해서 사용된다. pthread_exit(3) 가 호출되어서 스레드가 종료될때 pthread_cleanup_push에 의해서 인스톨된 함수가 호출된다. routine이 스레드가 종료될때 호출되는 함수이다. arg는 argument이다. cleanup handlers 는 주로 자원을 되돌려주거나, mutex 잠금등의 해제를 위한 용도로 사용된다.
만약 mutex 영역에서 pthread_exit가 호출되어 버릴경우 다른 스레드에서 영원히 block 될 수 있기 때문이다. 또한 malloc으로 할당받은 메모리, 열린 파일지정자(=file descriptor)를 닫기 위해서도 사용한다.
void pthread_cleanup_pop(int execute);
: pthread_cleanup_push와 함께 사용되며, install 된 cleanup handler을 제거하기 위해서 사용된다.
만약 execute 가 0 이라면, pthread_cleanup_push에 의해 인스톨된 cleanup handler를 (실행시키지 않고)삭제만 시킨다. 0이 아닌 숫자라면 cleanup handler을 실행시키고 삭제 된다.
'🚦 Server > Operating System' 카테고리의 다른 글
11. Process Scheduling (2) (0) | 2020.05.05 |
---|---|
10. Process Scheduling (1) (0) | 2020.04.29 |
fork() 와 exec() (6) | 2020.04.28 |
09. Threads (3) (0) | 2020.04.27 |
PA1: My Simple Shell (0) | 2020.04.27 |