경쟁 조건 발생

sok1029의 이미지

if(signal(SIGALRM, sig_alrm)==SIG_ERR)
{
return(nsecs);
}
alarm(nsecs);
pause();
return (alarm(0));

********

위 구문에 문제점 중에
[ 첫 alarm 호출과 pause 호출 사이에 경쟁 조건이 존재한다.
바쁜 시스템의 경우 pause 가 호출되기도 전에 경보가 발동해서 신호 처리부가 호출될 수 있다. 그런 일이 생기면 pause 호출이 영원히 차단된다(다른 신호는 잡지 않는다고 할 때.) ]

1.이부분에서 이해가 안되는 것은 프로세스가 나누어 지지도 않았는데 왜 경쟁조건이 발생하는 지 궁금하네요

혹여나 제 추측이건데 alarm을 호출 후 nsecs 시간의 짧고 긴 것에 따라 pause를 먼저 호출하느냐 아니면 신호 처리부(handler)를 먼저 처리하

느냐의 경쟁 조건을 말하는 것인가요?

2. 또한 예를 들어 read(STDIN_FILENO,~,~)로 시스템 호출을 한후 입력을 하지 않으면 block 된 상태로 계속 되는데요 먼저 호출한

alarm의 시간이 만료됨에 따라 신호가 발생해서 신호처리부(시그널핸들러) 가 실행되고 리턴을 하게 되면

read는 block이 해제되는 건가요??

그렇다면 모든 read,나 write와 같은 block모드의 시스템 호출 및 함수는 이 alarm함수에 의해 발생하는 시그널에 의해 해제될 수 있는 건가요??