8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관)
System Program/pthread 2013. 7. 3. 15:15클린업이란
쓰레드 취소 요청에 의해 쓰레드가 취소될 때, 경우에 따라서 정리가 필요한 부분을 정리하지 않고
쓰레드가 취소되어 종료되면 문제가 발생할 여지가 생긴다.
한 예로 뮤텍스로 묶인 임계영역을 두고 여러 쓰레드가 경쟁상태에 있을 경우, 어떤 쓰레드가
뮤텍스 락 상태로 취소되면 데드락에 빠질 수 있는 상황이 발생할 수 있다.
쓰레드 취소 요청에 대해서 정리가 필요한 부분이 있으면 아래 함수를 통해서 핸들러를 등록하여
핸들러를 통해서 정리하도록하여 문제가 발생하지 않도록 조치할 수 있다.
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 함수의 형태는 아래와 같다.
{
/* 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 |