3. 쓰레드 종료 및 연관 함수

System Program/pthread 2014. 3. 7. 11:59

1. 쓰레드 종료

 

쓰레드 종료에 대해서 크게 두가지 경우로 나누고 싶다.

 

1.1. 강제 종료

    - main() 함수의 주 쓰레드가 종료 시에 모든 추가 쓰레드는 종료된다.

    - 주 쓰레드나 추가 쓰레드 중에 exit() 함수 호출에 의한 종료 시 모든 쓰레드는 종료된다.  

    - pthread_cancle() 함수 호출에 의해서 종료

    - pthread_kill() 함수에 의한 종료

 

pthread_canel() 및 pthread_kill() 함수에 대해서는 다른 장에서 자세히 살펴본다.

 

1.2. 쓰레드 자체 종료

    - 쓰레드 콜백함수 return에 의한 종료

    - 쓰레드가 pthread_exit() 호출에 의한 종료 (아래 함수 정의 참조)

 

#include <pthread.h>

 

void pthread_exit(void *retval);

 

pthread_exit()함수의 호출은 return을 수행하는 것과 유사하나 다음과 같은 차이가 있다.

콜백 함수에서 다른 함수를 호출하는 경우 그 호출 함수에서 pthread_exit()함수를 호출할 수 있다.

이 때 retval에 종료 상태를 리턴할 수 있다.

 

만약 주 쓰레드에서 pthread_exit() 함수를 호출할 경우에는 주 쓰레드는 종료하지만 다른 쓰레드는 생존한다.

 

2. 쓰레드 ID 비교 함수

 

쓰레드 종료나 다른 작업을 수행 시 유용한 pthread 함수를 아래에 소개한다.

 

2.1. 자기 자신의 쓰레드 ID 얻기  

 

현재 자신의 쓰레드 ID는 아래와 함수를 통해서 알아볼 수 있다.

pthread_jon(), pthread_detach(),pthread_cancle(), pthread_kill() 함수 등에서 유용하게 사용할 수 있다.

 

#include <pthread.h>

 

pthread_t pthread_self(void);

호출 쓰레드의 쓰레드 ID를 리턴

 

2.2.  쓰레드 ID 비교 함수

 

#include <pthread.h>

 

int pthread_equal(pthread_t t1, pthread_t t2);

두 쓰레드가 동일하면 '0'이 아닌 값을 그렇지 않으면 '0'을 리턴한다.

 

3. 예제

 

예제는 쓰레드 생성 부분의 예제 코드를 보면 pthread_exit()를 사용한 내용이 있다.

 

 

 

 

'System Program > pthread' 카테고리의 다른 글

9. 쓰레드와 시그널  (0) 2014.03.10
4. 쓰레드 조인과 분리  (0) 2014.03.07
2. pthread 생성  (0) 2014.03.07
6. pthread attribute - (2)  (0) 2013.07.12
8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관)  (0) 2013.07.03
: