경쟁 조건 발생
글쓴이: sok1029 / 작성시간: 수, 2010/02/03 - 1:26오후
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함수에 의해 발생하는 시그널에 의해 해제될 수 있는 건가요??
Forums:
댓글 달기