pthread 기본 계약

pthread 기본 계약

pthread_create는 새 스레드가 실행할 함수와 하나의 void 포인터 인자를 받습니다. 이 인자가 언제까지 살아 있는지, 반환값을 누가 회수하는지, join 또는 detach를 어떻게 선택하는지가 기본 안전성을 좌우합니다.

01

시작 함수 정의

pthread 시작 함수는 void*를 받고 void*를 반환하는 형태를 맞춥니다.

시작 루틴
02

인자 수명 보장

스택 지역 변수 주소를 넘길 때는 부모 함수가 먼저 끝나지 않는지 특히 조심합니다.

lifetime
03

공유 데이터를 보호한다

여러 스레드가 같은 구조체를 바꾸면 mutex로 임계구역을 감쌉니다.

mutex
04

종료를 회수한다

join은 종료를 기다리고 반환값을 회수하며, detach는 OS가 종료 자원을 자동 정리하게 합니다.

join
pthread_create
스레드 생성과 시작 함수 연결 반환 코드를 확인해 생성 실패를 놓치지 않습니다.
create
인자 포인터
형 변환보다 수명 보장이 더 중요 루프 변수 주소를 그대로 넘기면 모든 스레드가 같은 값으로 실행될 수 있습니다.
arg
pthread_join
종료 대기와 자원 회수 join하지 않은 joinable thread는 종료 후에도 자원이 남을 수 있습니다.
cleanup

반환 코드 · 공유 구조체 · detach 선택 점검

반환 코드 pthread 함수들은 errno 설정보다 반환값으로 오류를 전달하는 경우가 많습니다.
공유 구조체 스레드별 인자와 공유 인자를 구조체로 나누면 수명 관리가 쉬워집니다.
detach 선택 결과를 회수할 필요가 없고 수명 주기를 분리할 때만 detach를 고려합니다.

생성-회수 골격

pthread_t tid;
pthread_create(&tid, NULL, worker, &arg);
pthread_join(tid, NULL);