C, C++

C] pthread 생성 및 활용

slowcloud_ 2026. 3. 4. 13:58

https://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread.h.html

 

<pthread.h>

The header defines the following symbols: PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DISABLE PTHREAD_CANCELED PTHREAD_COND_INITIALIZER PTHREAD_CREATE_DETACHED PTHREAD_CREATE_JOINABLE PTHREAD_EXPLICIT_SCHED PTHR

pubs.opengroup.org

전체 pthread.h에서 제공하는 명령어는 위 링크에서 확인할 수 있다.

 

> int pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void*), void*)

쓰레드를 생성한다. 쓰레드 정보를 저장할 위치, 쓰레드 애트리부트, 쓰레드에서 실행할 함수, 해당 함수에 적용할 파라미터를 설정한다.

애트리부트는 thread configuration이라고 생각하면 된다. 스택 사이즈, 스케줄 정책 등등을 설정할 수 있다.

쓰레드 생성 성공 시 0을 반환하며, 실패 시 오류값을 반환한다.

 

> int pthread_join(pthread_t, void**)

쓰레드가 완료될 때까지 대기한다. void**에는 쓰레드에서 반환한 값이 저장된다.

역시 성공 시 0을 반환하며, 실패 시 오류를 반환한다.

 

> void pthread_exit(void*)

쓰레드 내부로 전달한 함수에서 호출하면 된다. 쓰레드에서 값을 반환하는 용도로 사용한다. 해당 값은 상단의 pthread_join의 void**에 저장된다.

단순히 쓰레드에서 void* 를 반환하는 것과 동일하나, 쓰레드 내부에서 호출한 함수에서도 즉시 쓰레드를 종료한다.

 

#include <pthread.h>
#include <stdio.h>

void *f(void *data) {
  char *name = (char *)data;
  printf("hello from %s!", name);

  pthread_exit((void *)0);

  printf("it will be ignored!");
  return (void *)1234;
}

int main() {
  pthread_t pthread;

  int thr_id;
  int status;

  char p1[] = "thread";

  thr_id = pthread_create(&pthread, NULL, f, (void *)p1);

  pthread_join(pthread, (void **)&status);

  printf("thread exit value: %d", status);
  printf("main thread end!");

  return 0;
}