쓰레드를 위한 API와 Race condition을 알아보자.
#include <pthread.h>
typedef void (func)(void );int pthread_create(pthread_t tid, pthread_attr_t attr,
func f, void arg);
- 첫 번째 인자: main thread가 관리할 쓰레드의 id를 전달한다.
- 두 번째 인자: Joinable, Detached 등 쓰레드의 조건을 선택한다. NULL을 전달하면 기본값으로 Joinable이다.
- 세 번째 인자: 쓰레드로 처리할 함수이다.
- 네 번째 인자: 처리할 함수의 인자이다.
- 반환값: 쓰레드 생성을 성공하면 0, 아니면 nonzero이다.
- tid에 쓰레드 ID가 저장된다.
#include <pthread.h> pthread_t pthread_self(void)
- 반환값: 함수 caller의 thread id를 반환한다.
#include <pthread.h>
void pthread_exit(void *thread_return);
쓰레드가 처리하는 함수가 종료되면 쓰레드도 암시적으로 종료된다.
위의 함수로 명시적으로 쓰레드를 종료할 수 있다.
pthread_join(pthread_t tid, void **thread_return)
wait()과 비슷하다. 쓰레드가 종료되었을 때, main thread가 status를 가져가며, 쓰레드에 할당된 자원이 모두 해제된다.
- 첫 번째 인자: join할 thread의 id를 전달한다.
- 두 번째 인자: thread의 종료 상태값이 전달된다.
- 반환값: 성공하면 0, 에러발생시 nonzero
이 함수 또한 block되며, 쓰레드가 종료되어야 해제된다.
Joinable말고 Ditached 속성을 가진 쓰레드라면, join 필요없이 알아서 자원 할당을 해제한다.
둘 중 하나를 하지 않으면 메모리 누수가 발생한다.