작성
·
166
답변 1
0
안녕하세요 재혁님 ㅎㅎ
Q. 세마포어의 signal 메서드에서 공유자원 +1을 해준 후에 왜 if(s.value <=0)인가요 ?
signal
메서드에서 s.value
를 1 증가시킨 후 if(s.value <= 0)
조건을 검사하는 이유는 다음과 같습니다:
세마포어 값의 의미: 세마포어 값 s.value
는 사용 가능한 자원의 수를 나타냅니다. 이 값이 음수가 되면, 그 절대값은 대기 중인 프로세스의 수를 의미합니다. 예를 들어, s.value
가 -5
라면 5개의 프로세스가 자원을 기다리며 대기 중입니다.
자원의 상태 확인: signal
연산이 호출되면 s.value
는 1 증가합니다. 만약 증가하기 전에 s.value
가 0
이나 음수였다면, 증가 후에도 여전히 0
이하일 수 있습니다. 이 경우, 여전히 대기 중인 프로세스들이 존재한다는 의미이며, 이들 중 하나를 깨워 작업을 계속하도록 해야 합니다.
프로세스의 활성화: if(s.value <= 0)
조건이 참이면, 이는 아직 대기 큐에 프로세스가 남아있다는 것을 의미합니다. 따라서 이 조건을 통해 대기 큐에서 프로세스를 깨우고 작업을 계속할 수 있도록 합니다.
결국, if(s.value <= 0)
조건은 signal
연산이 실행된 후에도 여전히 대기 상태인 프로세스들이 있는지 확인하고, 그런 프로세스들이 있다면 활성화시키는 역할을 합니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.