인프런 커뮤니티 질문&답변

이재혁님의 프로필 이미지
이재혁

작성한 질문수

CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조

뮤텍스, 세마포어, 모니터 ★★★

세마포어의 signal() 메서드 질문

작성

·

166

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.


큰돌님 안녕하세요, 세마포어에 대해 듣는 중에 궁금한 점이 생겨 질문을 남깁니다 !

세마포어의 signal 메서드에서 공유자원 +1을 해준 후에

왜 if(s.value <=0)인가요 ?

공유자원이 >= 0이면 대기열에 있는 프로세스를 꺼내서 작동시킬 수 있는 것 아닌가요 ?

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 재혁님 ㅎㅎ

Q. 세마포어의 signal 메서드에서 공유자원 +1을 해준 후에 왜 if(s.value <=0)인가요 ?

 

signal 메서드에서 s.value를 1 증가시킨 후 if(s.value <= 0) 조건을 검사하는 이유는 다음과 같습니다:

  1. 세마포어 값의 의미: 세마포어 값 s.value는 사용 가능한 자원의 수를 나타냅니다. 이 값이 음수가 되면, 그 절대값은 대기 중인 프로세스의 수를 의미합니다. 예를 들어, s.value-5라면 5개의 프로세스가 자원을 기다리며 대기 중입니다.

  2. 자원의 상태 확인: signal 연산이 호출되면 s.value는 1 증가합니다. 만약 증가하기 전에 s.value0이나 음수였다면, 증가 후에도 여전히 0 이하일 수 있습니다. 이 경우, 여전히 대기 중인 프로세스들이 존재한다는 의미이며, 이들 중 하나를 깨워 작업을 계속하도록 해야 합니다.

  3. 프로세스의 활성화: if(s.value <= 0) 조건이 참이면, 이는 아직 대기 큐에 프로세스가 남아있다는 것을 의미합니다. 따라서 이 조건을 통해 대기 큐에서 프로세스를 깨우고 작업을 계속할 수 있도록 합니다.

결국, if(s.value <= 0) 조건은 signal 연산이 실행된 후에도 여전히 대기 상태인 프로세스들이 있는지 확인하고, 그런 프로세스들이 있다면 활성화시키는 역할을 합니다.



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


이재혁님의 프로필 이미지
이재혁

작성한 질문수

질문하기