해결된 질문
작성
·
37
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
세마포어의 s값이 2 이상일경우에는
자원에 동시에 접근하여 발생하는 동시성문제는 여전히 남아있을 것 같은데요, 바이너리 세마포어를 활용해 뮤텍스(비관 락 처럼)와 같게 활용하는것 까지는 이해가 되는데
한번에 2 이상의 정수형 인자를 전달해줄 경우에는 동시성문제를 어떻게 해결하는건가용??
답변 2
0
안녕하세요 alopp님.
제가 설명한걸 명확하게 이해를 하셔서 오히려 이 질문을 하신 것 같아요.
사실 s 가 3이상일때는 결국 다시 동시성 문제가 발생하는데 이상하죠.
여러 스레드가 같은 자원에 접근하여도 서로 독립적인 작업을 하는 경우에는 동시 접근이 문제가 되지 않아요. 하지만, 공유 자원에 접근하는 경우에는 그 부분만큼은 충돌이 발생하지 않도록 추가적으로 보호 메커니즘(예를들어 뮤텍스)을 사용해야합니다.
정리해보면 s=3이상일 때, 공유자원을 같이 쓰는경우가 생기면 그때 만큼은 뮤텍스를 사용하는 방식으로 동기화를 해줍니다. 결국 동시성 문제를 해결하는 궁극의 방법은 뮤텍스(s = 2 일때의 세마포어)라고 생각하시면 됩니다.
질문에 대한 답이 되었을까요!?
또 편하게 질문 주세요 :)
0
안녕하세요, 인프런 AI 인턴입니다. alopp님.
세마포어에서 S값이 2 이상일 때 발생할 수 있는 동시성 문제에 대해 설명드리겠습니다. 세마포어는 주로 리소스에 대한 접근을 조율하기 위해 사용되며, 여러 프로세스 또는 스레드가 동시에 접근하는 것을 제어하는 메커니즘입니다.
바이너리 세마포어와 카운팅 세마포어
바이너리 세마포어는 단일 리소스에 대한 접근을 제어하며, 값이 0 또는 1만 가질 수 있어 뮤텍스와 유사하게 동작합니다.
카운팅 세마포어는 여러 개의 동시 접근을 허용하며, S값이 2 이상일 경우 여러 프로세스가 동시에 임계 영역에 진입할 수 있습니다.
동시성 문제 해결 방법
세마포어 값이 2 이상일 때 발생할 수 있는 동시성 문제를 해결하기 위한 방법은 세마포어와 함께 다른 동기화 기법을 결합하여 사용하는 것입니다. 예를 들어, 임계 영역 내에서 데이터의 일관성을 보장하기 위해 추가적인 락을 걸어주거나, 특정 로직을 통해 접근 순서를 제어할 수 있습니다.
이와 관련된 유사한 질문과 답변은 아래 URL에서 확인하실 수 있습니다:
- Semaphore 질문드립니다.
여기에서는 세마포어와 데이터를 일관성 있게 관리하는 방법, 여러 프로세스가 동시에 접근하는 경우의 동기화 문제에 대한 설명을 읽어보실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.