pthread_create
#include <pthread.h>
int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);
/*
성공하면 0을 반환하고, 그 외에는 오류를 나타내는 오류번호를 반환.
*/
스레드는 프로세스 내에서 고유한 스레드 ID로 구분하게 되는데, 이 스레드 ID를 나타내는 데이터 타입이 pthread_t
이다. pthread_t
는 운영체제마다 다르게 구현되어 있기 때문에 다양한 데이터 타입으로 구현할 수 있도록 허용되어 있다.
thread
pthread_create가 성공적으로 수행되면 생성된 스레드의 스레드 ID가 이 포인터가 가리키는 버퍼에 담긴다.
attr
스레드의 속성을 설정하는 매개변수. NULL을 넣으면 디폴트 속성값이 들어간다.
start_routine
pthread_create에 의해 새로 생성된 스레드가 수행할 함수. 이 함수는 하나의 매개변수를 받는데, 그게 바로 pthread_create의 네번째 매개변수 arg
이다.
arg
start_routinue
함수에 전달되는 매개변수.
pthread_detach
#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
#include <pthread.h>
int pthread_join(pthread_t thread, void **value_ptr);
/*
성공하면 0을 반환하고, 그 외에는 오류를 나타내는 오류번호를 반환.
*/
특정 스레드가 종료될때까지 기다렸다가 그 스레드의 반환값 포인터를 받는 함수. 종료된 스레드의 자원도 해제해주는 역할을 하므로 pthread_detach
와 동시에 쓰일 수 없다.
thread
종료를 기다릴 스레드의 ID
value_ptr
인자가 NULL인 경우를 제외하면 종료를 기다린 스레드의 반환값, 즉 start_routine
이 반환하는 반환값을 받을 수 있다.
C언어: 쓰레드 pthread_join() 예제 - 쓰레드의 종료를 기다린다
스레드(THREAD) 개념과 예제