커널 device driver에서 usr app의 쓰레드로 시그널보다 좋은 방

leonhan의 이미지

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]

pastime의 이미지

멀티 쓰레드 프로그램인 경우
프로세스 전체에 영향을 미치는 SIGSTOP 이나 SIGCONT 등이 아닌 일반적인 시그널은
프로세스 내의 하나의 쓰레드에서만 처리하게 되어 있습니다.

프로세스 내의 각각의 쓰레드에게 시그널을 보낼 경우에는
gettid() 로 알아낸 각 쓰레드 아이디마다
tkill() 을 통해 따로 시그널을 보내는 방법을 사용할 수 있겠습니다.