답변:
그것들은 거의 상호 교환 가능하며 하나는 다른 것으로 만들 수 있습니다. 구현 / 선호하는 언어에 따라 다소 다릅니다 (예 : "synchronize"키워드를 사용하는 내장 모니터가 있습니다). 그러나 세마포어는 다음과 같은 이유로 모니터보다 "낮은 레벨"엔티티로 간주됩니다.
모니터와 세마포 모두 스레드 동기화라는 동일한 목적으로 사용됩니다. 그러나 모니터는 잠금 획득 및 해제에 대한 모든 세부 사항을 처리하기 때문에 세마포어보다 사용하기가 더 쉽습니다. 세마포어를 사용하는 응용 프로그램은 응용 프로그램이 종료 될 때 스레드가 획득 한 잠금을 해제해야합니다. 응용 프로그램 자체에서 수행해야합니다. 응용 프로그램이이 작업을 수행하지 않으면 공유 리소스가 필요한 다른 스레드를 진행할 수 없습니다.
세마포어를 사용할 때의 또 다른 차이점은 공유 리소스에 액세스하는 모든 루틴은 리소스를 사용하기 전에 명시 적으로 잠금을 획득해야한다는 것입니다. 멀티 스레딩을 다루는 루틴을 코딩 할 때 쉽게 잊을 수 있습니다. 세마포어와 달리 모니터는 필요한 잠금을 자동으로 획득합니다. [1]
투표율이 높은 스택 오버플로 답변 세마포어 대 모니터를 참조하십시오 . 차이점은 무엇입니까? 공중 화장실 및 자전거 스탠드와 비슷하고 기억에 남는 비유로.
마지막으로 오늘 강의에서 세마포 대신 모니터를 사용하는 이유에 대해 논의했습니다.
기본적으로 모니터와 세마포어는 동일하게 표현되므로 원래 세마포어가 사용 된 모니터의 문제에 대한 해결책을 찾을 수 있으며 그 반대도 마찬가지입니다.
글쎄, 우리는 이미 그것을 알고 있었으므로 왜 세마포어 대신 모니터를 사용하겠습니까?
개인 취향. 일반적으로 데스크톱 응용 프로그램은 모니터를 사용하므로 실수 가능성이 적지 만 상대적으로 부풀어 오른 구조를 갖습니다. 반면에 세마포어는 운영 체제에서 종종 사용되는데, 경량 구조이므로 실수 가능성이 더 높습니다.
모니터 나 세마포어를 사용해야하는지 여부는 상황에 따른 결정이라고 결론 지을 수 있습니다. 실시간 시스템을 구축하는 경우 세마포어를 사용하고 싶거나 사무실 프로그램을 구축하는 경우 모니터도 함께 사용할 수 있습니다.
예를 들어 "작은 sempaphores의 책"을 들여다Allen B. 다우니 많은 동기화 문제를 설명하고 해결합니다. 특히 botched 솔루션을 확인하면 세마포어가 매우 낮은 수준의 메카니즘이고 매우 강력하지만 잘못 사용하기 쉬운 단순한 실수가 끔찍한 결과를 낳는 경우가 있습니다 (동시 프로그램의 고유 한 비 결정적 조작으로 인해 더 악화됨). 예를 들어, 상호 배제, 잘못된 세마포어에서의 작동 등을 잊어 버리는 것은 쉬운 일이다. 모니터는 가장 빈번하게 사용되는 경우에 사전 패키지 된 솔루션을 제공하고 객체 지향 프로그래밍의 장점을 최대한 활용합니다 (즉, 모니터에서 관리하는 변수를 망칠 수있는 유일한 방법은 작업을 통한 것임). 단점은 객체 지향이 아닌 언어로 쉽게 개조 할 수 없다는 것입니다.