꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

시스템 프로그래밍

스레드 관리

gold_dragon 2021. 5. 7. 16:26

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