[Philosophers] 허용함수 - pthread

Jiwon-Woo·2021년 9월 12일
0

pthread_create

man page

#include <pthread.h>

int	pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);

/*
성공하면 0을 반환하고, 그 외에는 오류를 나타내는 오류번호를 반환.
*/

pthread_t

스레드는 프로세스 내에서 고유한 스레드 ID로 구분하게 되는데, 이 스레드 ID를 나타내는 데이터 타입이 pthread_t 이다. pthread_t 는 운영체제마다 다르게 구현되어 있기 때문에 다양한 데이터 타입으로 구현할 수 있도록 허용되어 있다.

  • Mac OS X : pthread 구조체의 pointer

pthread_create의 매개변수

  1. thread
    pthread_create가 성공적으로 수행되면 생성된 스레드의 스레드 ID가 이 포인터가 가리키는 버퍼에 담긴다.

  2. attr
    스레드의 속성을 설정하는 매개변수. NULL을 넣으면 디폴트 속성값이 들어간다.

  3. start_routine
    pthread_create에 의해 새로 생성된 스레드가 수행할 함수. 이 함수는 하나의 매개변수를 받는데, 그게 바로 pthread_create의 네번째 매개변수 arg 이다.

  4. arg
    start_routinue 함수에 전달되는 매개변수.

Linux Programming - 스레드(Thread)의 식별과 생성


pthread_detach

man page

#include <pthread.h>

int	pthread_detach(pthread_t thread);

/*
성공하면 0을 반환하고, 그 외에는 오류를 나타내는 오류번호를 반환. errno는 변경하지 않는다.
*/

pthread_create() 로 생성한 스레드가 종료될 때 스레드 자원을 회수해주는 함수. pthread_detach() 를 사용하지 않아도 pthread_create() 에 속성(attr)을 주면 스레드 종료시에 자원을 회수할 수 있다.
때에 따라 pthread_detach 함수가 실행되기 전에 스레드가 종료될 수도 있기 때문에 attr 을 통해 자원을 해제하는 후자의 방법이 좀 더 안전하다.

C언어: 쓰레드 pthread_detach() 예제 - 쓰레드를 분리시킨다
pthread_attr_setdetachstate


pthread_join

man page

#include <pthread.h>

int	pthread_join(pthread_t thread, void **value_ptr);

/*
성공하면 0을 반환하고, 그 외에는 오류를 나타내는 오류번호를 반환.
*/

특정 스레드가 종료될때까지 기다렸다가 그 스레드의 반환값 포인터를 받는 함수. 종료된 스레드의 자원도 해제해주는 역할을 하므로 pthread_detach 와 동시에 쓰일 수 없다.

매개변수

  1. thread
    종료를 기다릴 스레드의 ID

  2. value_ptr
    인자가 NULL인 경우를 제외하면 종료를 기다린 스레드의 반환값, 즉 start_routine 이 반환하는 반환값을 받을 수 있다.

C언어: 쓰레드 pthread_join() 예제 - 쓰레드의 종료를 기다린다
스레드(THREAD) 개념과 예제

0개의 댓글