본문 바로가기
멀티코어 프로그래밍/Pthread

Pthread

by 기리의 개발로그 2022. 5. 2.

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 입력
  • 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

댓글