강의

멘토링

로드맵

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

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

SpinLock & Busy Waiting

뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?

작성

·

100

0

강의자료에서 세마포의 경우 P연산에서

image.png


첫째줄에 while(test_and_set(&lock)==1)을 수행하고 있는데요, 혹시 이부분은 busy waiting으로 생각하지 않는 건가요?
뮤텍스나 세마포어 모두 강의자료에서 위 코드를 처음 실행하는데 이부분도 busy waiting에서 while(); 문과 동일하지 않나 생각이 들어서요
혹시 제가 잘못 이해하고 있는 것이라면 알려주시면 감사하겠습니다!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 한봉훈님.

세마포어의 P 연산에서 while(test_and_set(&lock) == 1) 부분이 실제로 busy waiting을 수행하는지를 질문해 주셨군요. 우선, busy waiting이란 프로세스가 일정 조건을 만족할 때까지 계속해서 상태를 확인하고 기다리는 상태로, CPU 자원을 낭비하게 됩니다.

세마포어나 뮤텍스 같은 동시성 제어 기법에서 이론적으로는 busy waiting을 최소화하려고 노력합니다. 그러나 test_and_set 류의 잠금 방식을 사용할 경우, 초기 잠금 획득 시도에서 잠시 동안 busy waiting이 발생할 수 있습니다. 이는 아주 짧은 시간 동안만 일어나며, 스레드가 실제로 자원을 사용할 수 있을 때까지 대기 큐에 들어가도록 설계되어서 최종적으로는 busy waiting의 문제를 해결하려 합니다.

이는 스레드가 바로 자원을 획득하지 못할 경우, 대기 상태로 전환되어 다른 스레드가 CPU를 사용할 수 있도록 하는 방식으로 busy waiting 상태를 극복하게 됩니다. 다만, 이러한 해결 방식들이 운영체제나 JVM의 스케줄링 정책에 따라 달라질 수 있으므로, 환경에 따라 다르게 동작할 수 있다는 점을 유념해야 합니다.

더 많은 정보와 예제를 통해 이 주제에 대한 깊이 있는 이해를 얻으실 수 있도록, 아래의 링크에서 유사한 논의를 참조하시기를 추천드립니다.
- 뮤텍스 작동 원리 및 구현 방식

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

한봉훈님의 프로필 이미지
한봉훈

작성한 질문수

질문하기