Pthread
POSIX(Portable Operation System Interface)
이식 가능한 운영체제 프로그래밍 환경의 필요성 대두
- 기존 운영체제 API들이 통일되지 않음
- 특정 운영체제에서 프로그래밍한 코드를 재사용할 수 없음
UNIX OS를 대상으로 한 API
Process, Thread, Signal, Floating point exception, C library 등의 규약 제공
POSIX Threads API
Pthreads
- POSIX standards for threads
스레드 생성, 소멸, 실행 제어를 위한 API
대부분의 UNIX 기반 운영체제에서 지원
병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 API
Pthreads 모델
- 함수 호출을 스레드 생성으로 치환
- 특정 함수를 실행하는 스레드를 생성
- 함수를 실행하는 스레드는 메인 스레드와 concurrent 하게 실행됨
- 아래는 foo 함수를 실행하는 스레드를 생성하는 예시
pthread.h / pthread_t
pthread.h
- Pthreads API 함수 선인 및 타입을 담고 있는 헤더파일
- Pthreads API 사용을 위해 반드시 include 해야 함
pthread_t
- 하나의 Thread를 나타내는 타입
- Pthreads는 thread를 하나의 변수로 취급
- Pthreads API 함수들의 아규먼트로 전달
- Pthreads API 함수들을 사용하여 thread 실행 제어
기본적인 함수
1. pthread_create
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void (* start_routine)(void *), void *arg)
아규먼트
- pthread_t *thread
- 함수를 실행할 thread 변수의 포인터
- pthread_t 변수가 아닌 그 포인터를 넘겨준다는 점을 주의
- const pthread_attr_t *arr
- thread의 성질(실행 권한, detach 여부 등)을 결정
- 사용하지 않을 경우 NULL 이용
- void (* start_routine)(void *)
- 실행될 함수
- 함수는 void * 를 아규먼트로 받고 void * 를 반환하는 타입의 함수
- void *arg
- 함수의 아규먼트
- 사용하지 않을 경우 NULL 입력
- pthread_t *thread
Return 값
- 성공적으로 스레드를 생성했을 경우, 0을 return
- 실피 시 error number 반환
- 아규먼트로 넘겨준 thread * 가 가리키는 메모리의 값은 정의되지 않음
2. pthread_join
int pthread_join(pthread_t thread, void **retval)
아규먼트
- pthread_t thread
- 실행 종료를 기다릴 thread
- pthread_t * 가 아닌 pthread_t 를 아규먼트로 받음을 주의
void **retval
- 실행이 끝난 함수의 반환값이 저장되는 포인터
- 함수의 반환 값이 void * 이므로 void * 를 저장할 수 있는 위치(void **) 를 아규먼트로 넘겨주어야 함
Return 값
- 성공적으로 수행이 끝난 경우 0을 반환
- 실패할 경우 error number 반환
3. pthread_exit
void pthread\_exit(void *retval)
- 아규먼트
- void *retval
- 자신을 생성한 스레드에 retval 인자를 반환하고 스레드 종료
반응형
'멀티코어 프로그래밍 > Pthread' 카테고리의 다른 글
Pthread 아규먼트(2) (2) | 2022.05.09 |
---|---|
Pthread 아규먼트(1) (13) | 2022.05.06 |
Pthread 프로그래밍(2) (4) | 2022.05.04 |
Pthread 프로그래밍(1) - "Hello World" (6) | 2022.05.03 |
Pthread Attributes (0) | 2015.07.18 |
댓글