9. 쓰레드와 시그널

System Program/pthread 2014. 3. 10. 11:01

1. 쓰레드와 시그널

 

시그널은 정말 복잡하다. 여러가지 경우의 수를 모두 제쳐두고 간단히 말해서 아래와 같이 나는 정리하고 싶다.

시그널은 프로세스 기반으로 동작한다. 즉 시그널의 처리 기본 단위는 프로세스이다.

 

단 시그널 기반으로 제어가 가능한데 이 경우는 쓰레드 기반 시그널 마스크를 통해서 가능하다.

 

2. 시그널 마스크 제어

 

프로세스 기반이 아닌 쓰레드 기반으로 제어를 하고 싶으면 아래 함수를 통해서 쓰레드 전용 시그널 마스크

를 설정하여야 한다.

 

#include <signal.h>

 

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

 

성공하면 '0'을 리턴, 에러가 발생하면 에러 번호(양수)를 리턴한다.  

 

위 함수의 사용법은 프로세스 기반 sigprocmask() 함수와 같다.

 

3. 쓰레드 기반 시그널 전송

 

#include <signal.h>

 

int pthread_kill(pthread_t thread, int sig);

 

성공하면 '0'을 리턴, 에러가 발생하면 에러 번호(양수)를 리턴한다.  

 

위의 함수는 프로세스 내의 다른 쓰레드에 시그널 sig를 보낸다. 대상 쓰레드는 thread로 지정한다.

 

#include <signal.h>

 

int pthread_sigqueue(pthread_t thread, int sig, const union sigval value);

 

성공하면 '0'을 리턴, 에러가 발생하면 에러 번호(양수)를 리턴한다.  

 

pthread_kill() 과 siggueue() 의 기능을 합친 것이다.

같은 프로세스 내에 시그널에게 데이터까지 보낼 경우 위의 함수를 사용한다.

 

4. 마무리

 

프로세스 기반의 시그널을 이해하고 적용하기에도 매우 복잡하다. 이를 쓰레드 기반까지 확장하여 처리하는

응용프로그램이 얼마나 될까 쉽다.  여기서는 단지 시그널을 쓰레드에서도 다룰 수 있다는 정도만 이해하고 넘어간다.

 

 

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

4. 쓰레드 조인과 분리  (0) 2014.03.07
3. 쓰레드 종료 및 연관 함수  (0) 2014.03.07
2. pthread 생성  (0) 2014.03.07
6. pthread attribute - (2)  (0) 2013.07.12
8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관)  (0) 2013.07.03
: