Pthread
thread 표준 API입니다. POSIX 스레드 또는 Pthread(피-스레드)라고 부릅니다. 저수준 API로 100여개의 함수를 제공합니다. 복잡하긴 하지만, 유닉스 시스템 핵심 스레딩 라이브러리입니다. 다른 스레딩 솔루션도 결국 Pthread를 기반으로 구현되어 있기 때문에 익혀둘 가치가 있습니다.
Pthread 라이브러리
<pthread.h> 헤더 파일에 정의되어 있습니다. 모든 함수는 pthread_로 시작합니다. 크게 두 가지 그룹으로 나뉘는데, 스레드 관리(생성, 종료, 조인, 디태치 함수 등), 동기화(뮤텍스 등 동기화 관련 함수)로 나뉘어집니다.
기본 라이브러리(glibc)와 분리된 libpthread 라이브러리에 pthread가 구현되어 있기 때문에 컴파일 시 명시적으로 -pthread 옵션이 필요합니다.
ex) gcc -pthread test.c -o test
스레드 생성
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
// thread : 생성된 스레드 식별자
// attr : 스레드 특정 설정 (default: NULL)
// start_routine : 스레드 함수 (스레드로 분기해서 실행할 함수)
// arg : 스레드 함수 인자
스레드 종료
void pthread_exit(void *retval);
// exit와 유사, NULL 또는 0은 정상 종료
스레드 조인
int pthread_join(pthread_t thread, void **thread_return);
// thread : 기다릴 스레드 식별자
// thread_return : 스레드의 리턴값을 가져올 수 있는 포인터
스레드 디태치
해당 스레드가 종료될 경우, 즉시 관련 리소스를 해체합니다. pthread_join을 기다리지 않고, 종료 즉시 리소스를 해제합니다.
ex)
int pthread_detach(pthread_t thread);
Pthread 뮤텍스 - 상호 배제 기법
뮤텍스 선언과 초기화
pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER;
뮤텍스 락 걸기/풀기
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
'시스템 프로그래밍' 카테고리의 다른 글
메모리와 mmap (0) | 2021.05.07 |
---|---|
쉘 스크립트 (0) | 2021.05.07 |
시그널 (signal) (0) | 2021.05.07 |
IPC 기법 (0) | 2021.05.07 |
프로세스 관리 - 프로세스 종료 (0) | 2021.05.06 |