-
카테고리
-
세부 분야
취업 · 이직
-
해결 여부
미해결
세마포어의 signal() 메서드 질문
24.05.06 21:04 작성 조회수 86
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
큰돌님 안녕하세요, 세마포어에 대해 듣는 중에 궁금한 점이 생겨 질문을 남깁니다 !
세마포어의 signal 메서드에서 공유자원 +1을 해준 후에
왜 if(s.value <=0)인가요 ?
공유자원이 >= 0이면 대기열에 있는 프로세스를 꺼내서 작동시킬 수 있는 것 아닌가요 ?
답변을 작성해보세요.
0
큰돌
지식공유자2024.05.07
안녕하세요 재혁님 ㅎㅎ
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점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
답변 1