8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관)

System Program/pthread 2013. 7. 3. 15:15

클린업이란

 

쓰레드 취소 요청에 의해 쓰레드가 취소될 때, 경우에 따라서 정리가 필요한 부분을 정리하지 않고

쓰레드가 취소되어 종료되면 문제가 발생할 여지가 생긴다.

 

한 예로 뮤텍스로 묶인 임계영역을 두고 여러 쓰레드가 경쟁상태에 있을 경우, 어떤 쓰레드가 

뮤텍스 락 상태로 취소되면 데드락에 빠질 수 있는 상황이 발생할 수 있다.

 

쓰레드 취소 요청에 대해서 정리가 필요한 부분이 있으면 아래 함수를 통해서 핸들러를 등록하여

핸들러를 통해서 정리하도록하여 문제가 발생하지 않도록 조치할 수 있다.

 

#include <pthread.h>

 

void pthread_cleanup_push(void (*routine)(void *), void *arg);

void pthread_cleanup_pop(int execute); 

 

pthread_cleanup_push() 함수는 routine으로 지정한 함수를 클린업 핸들러로 등록하고 등록된 핸들러는

함수의 push/pop의 의미에서 유추할 수 있듯이 구현이 스택으로 구현되어 있음을 유추할 수 있다. 따라서

등록하면 스택상의 최상위에 차곡차곡 쌓이게된다.

 

pthread_cleanup_push() 함수의 routine 함수의 형태는 아래와 같다.

 

void routine(void *arg)

{

/* cleanup codes */

 

pthread_cleanup_pop() 함수의 execute 인자가 '0'이 아닌 값이 설정되면 클린업 핸들러가 pthread_cleanup_pop()

함수에서도 호출된다.

 

 

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

2. pthread 생성  (0) 2014.03.07
6. pthread attribute - (2)  (0) 2013.07.12
5. pthread attributes  (0) 2013.07.02
1. pthread 개요  (0) 2013.05.27
7. 쓰레드 취소  (0) 2013.01.01
: