시스템 프로그래밍 - 스레드 생성/소멸
1. 리눅스 스레드 구현
1) 스레드 생성
(1) 특징
- 스레드의 집합과 자원의 집합
- 수행 유닛은 스레드임
- 프로세스는 스레드의 수행 환경을 제공
- Thread ID를 가지고 있음
2) 프로세스와 스레드 함수 비교
2. Pthread 생성 및 종료
1) Pthread_self() 함수
- 자신의 스레드 ID를 얻음
- 성공 : 호출한 스레드의 스레드ID를 리턴
- 실패 : 정의 되어 있지 않음
#include <pthread.h>
Pthread_t pthread_self(void);
2) Pthread_create() 함수
- 스레드를 생성함
- 성공 : 0을 리턴
- 실패 : 0이 아닌 에러코드 리턴 (EAGAIN, EINVAL, EPERM)
#include <pthread.h>
int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);
- thread : 스레드 ID를 가리키는 포인트
- attr : 스레드와 관련된 특성을 지정하기 위한 용도로 사용
- 마지막 두개의 인자는 실행을 시작할 함수와 이 함수에 전달할 인자를 스레에게 알려줌
3) Pthread_exit() 함수
- 프로세스를 종료시키지 않고, 호출한 스레드만 종료
- 성공 : 0을 리턴
- 실패 : 에러 정의되어 있지 않음
#include <pthread.h>
void pthread_exit(void *value_ptr);
- value_ptr : 스레드가 참조하는 데이터를 가리키는 포인터
- pthread_join 함수 호출이 성공했을 때 사용
4) Pthread_join() 함수 (=waitpid)
- 명시된 스레드가 종료할 때까지 호출한 스레드를 대기시킴
- 성공 : 0을 리턴
- 실패 : 0이 아닌 에러코드 리턴
#include <pthread.h>
void pthread_join(pthread_t thread,void **value_ptr);
- thread : 종료를 기다리는 스레드
- thread가 종료되어야 현재 스레드는 join에서 벗어남
- value_ptr : 타겟 스레드의 리턴 상태를 가리키는 포인터를 저장하기 위한 위치
- 리턴 상태는 타겟 스레드가 pthread_exit 함수나 return 문으로 넘겨준 값
5) Pthread_cancel() 함수
- 다른 스레드를 제거
- 성공 : 0 리턴
- 실패 : 0이 아닌 에러코드 리턴
#include <pthread.h>
int pthread_cancel(pthread_t thread);
6) Pthread_cleanup_push() 함수
- 스레드 cleanup handlers 를 스택 메모리에 push 함
- 성공 : 0을 리턴
- 실패 : 0이 아닌 에러코드 리턴
#include <pthread.h>
int pthread_cleanup_push(void(*routine(void*),void *arg));
- arg : 스레드 핸들러 루틴 argument
7) Pthread_cleanup_pop() 함수
- 스택에 push된 cleanup handler를 제거함
#include <pthread.h>
int pthread_cleanup_pop(int execute);
댓글남기기