줘이리의 인생적기

Pthread 본문

공부/시스템 프로그래밍

Pthread

줘이리 2021. 12. 29. 23:00
728x90

POSIX스레드라고 부르며, Pthread[피스레드]라고도 부른다.

 

pthread는 저수준 API로 100여개의 함수를 제공한다.

유닉스 시스템의 핵심 스레딩 라이브러리이다.

 

<pthread.h> 헤더파일에 정의되어 있으며, pthread_로 모든 함수가 시작된다.

스레드 관리(생성, 종료, 조인, 디테치)와 관련된 함수, 동기화(뮤텍스)와 관련된 함수를 주로 익혀두면 좋다.

 

 

기본 라이브러리(glibc)와 분리된 libpthread 라이브러리에 구현되어 있어서 컴파일시에 -pthread 옵션이 필요하다.

gcc -pthread test.c -o test


 

스레드 생성

pthread_t thread1;
void *thread_function(void *ptr);

ret = pthread_create(&thread1, NULL, thread_function, (void*)message1);
// 첫 번째 인자 : 해당 thread를 카리키는 포인터
// 두 번째 인자 : 스레드의 특정한 설정이 필요한 경우, 기본 NULL
// 세 번째 인자 : 해당 정의되어 있는 함수
// 네 번째 인자 : 해당 정의되어 있는 함수의 인자
// 리턴 값 0 : 생성
// 리턴 값 에러 : 실패

 

스레드 종료

pthread_exit(NULL);
// 첫 번째 인자 : NULL이나 0이면 정상 종료

 

스레드 조인

메인스레드에서 생성된 스레드들이 끝날 때까지 기다려주는 함수

(끝나기도 전에 메인스레드가 진행되면 안되니까)

스레드들의 종료와 상태값으로 추가 처리가 가능하다.

pthread_join(p_thread, (void *)&status);
// 첫 번째 인자 : 기다릴 스레드
// 두 번째 인자 : 상태 값
printf("thread join : %d\n", status);

 

스레드 디테치

해당 스레드가 종료될 경우 관련 리소스를 해제하는 함수

메인스레드는 해당 스레드가 끝날 때까지 기다리지 않는다.

조인과는 다르게 관련 리소스가 바로 해제되어 추가 처리가 불가능하다.

// 함수원형
int pthread_detach(pthread_t thread);

 

뮤텍스 선언, 초기화

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.12.31
쉘 스크립트  (0) 2021.12.27
tar  (0) 2021.12.24
시그널(signal)  (0) 2021.12.22
프로세스 우선순위 변경  (0) 2021.12.20