커널 device driver에서 usr app의 쓰레드로 시그널보다 좋은 방
글쓴이: leonhan / 작성시간: 월, 2004/07/05 - 10:58오후
usr app 은 다음과 같습니다. a와 b는 스레드로 따로 돌고 있습니다.
func a ()
{
while(1)
{
printf (a\n);
wait signal(sigusr1);
printf (b\n);
wait signal(sigusr2);
}
}
func b()
{
printf(c\n);
wait signal(sigusr2);
}
즉 sigusr2가 왔을때 printf a와 c 가 동시에 수행되어야 합니다.
이러한 시그널은 커널 device driver에서 인트럽트가 2개가 호출되면
intfunc1
{
signal (sigusr1);
}
intfunc2
{
signal (sigusr2);
}
이렇습니다.
그런데 sigusr2를 보내도 usr app의 두 함수가 동시에 받질 못합니다.
혹시 시그널 보다 위와 같은 동작을 수행해야 할 때 더 좋은 구조는 없을까요 ?
혹시 시그널을 사용하더라도 두 함수가 동시에 수행되도록 하는 방법은 ? [/b]
Forums:
tkill..
멀티 쓰레드 프로그램인 경우
프로세스 전체에 영향을 미치는 SIGSTOP 이나 SIGCONT 등이 아닌 일반적인 시그널은
프로세스 내의 하나의 쓰레드에서만 처리하게 되어 있습니다.
프로세스 내의 각각의 쓰레드에게 시그널을 보낼 경우에는
gettid() 로 알아낸 각 쓰레드 아이디마다
tkill() 을 통해 따로 시그널을 보내는 방법을 사용할 수 있겠습니다.
댓글 달기