왜 세마포어 대신 모니터를 사용 하시겠습니까?


11

저는 현재 대학에서 동시 프로그래밍 과정에 참석하고 있으며 최근 모니터 개념에 대해 이야기하기 시작했습니다. 상호 배제의 필요성을 이해하지만 왜 모니터를 사용해야하는지 이해하지 못합니다.

내가 이해하는 것처럼 모니터는 프로세스가 항상 중요 섹션에 정확히 하나 또는 전혀 없음을 보장합니다. 우리는 세마포어로 정확하게 그것을 달성 할 수 있습니다. 또한 우리는 세마포어를 사용하여 모니터를 구현합니다.

그렇다면 왜 세마포어가있는 세마포어와 정확히 동일한 것을 구현해야합니까? 어떤 혜택이 있습니까?

답변:


8

그것들은 거의 상호 교환 가능하며 하나는 다른 것으로 만들 수 있습니다. 구현 / 선호하는 언어에 따라 다소 다릅니다 (예 : "synchronize"키워드를 사용하는 내장 모니터가 있습니다). 그러나 세마포어는 다음과 같은 이유로 모니터보다 "낮은 레벨"엔티티로 간주됩니다.

모니터와 세마포 모두 스레드 동기화라는 동일한 목적으로 사용됩니다. 그러나 모니터는 잠금 획득 및 해제에 대한 모든 세부 사항을 처리하기 때문에 세마포어보다 사용하기가 더 쉽습니다. 세마포어를 사용하는 응용 프로그램은 응용 프로그램이 종료 될 때 스레드가 획득 한 잠금을 해제해야합니다. 응용 프로그램 자체에서 수행해야합니다. 응용 프로그램이이 작업을 수행하지 않으면 공유 리소스가 필요한 다른 스레드를 진행할 수 없습니다.

세마포어를 사용할 때의 또 다른 차이점은 공유 리소스에 액세스하는 모든 루틴은 리소스를 사용하기 전에 명시 적으로 잠금을 획득해야한다는 것입니다. 멀티 스레딩을 다루는 루틴을 코딩 할 때 쉽게 잊을 수 있습니다. 세마포어와 달리 모니터는 필요한 잠금을 자동으로 획득합니다. [1]

투표율이 높은 스택 오버플로 답변 세마포어 대 모니터를 참조하십시오 . 차이점은 무엇입니까? 공중 화장실 및 자전거 스탠드와 비슷하고 기억에 남는 비유로.


나는 기본적으로 세마포어와 같은 작업을 수행하지만, 상호 배제를 보장하면서 데이터에 액세스하고 조작 할 수있는 인터페이스를 제공함으로써 프로그래머로부터 잠금 / 잠금 해제의 필요성을 제거합니다. 잠금 / 잠금 해제 (손상된 데이터가 발생할 수 있음)를 잊을 수 없기 때문에 코드가 더 깨끗하고 코드에 버그가 적을 수 있습니다. 맞습니까? 아니면 뭔가 빠졌습니까?
Dennis Hein

참조 된 텍스트는 모니터를 사용할 때 잠금 획득 및 해제가 필요하지 않다고 오해의 소지가 있습니다. Java의 동기화 된 키워드를 사용하지만 en.wikipedia.org/wiki/Monitor_(synchronization) 에 따르면 일반적으로 모니터의 조건 변수에는 대기 / 신호 호출이있어 응용 프로그램에서도 구현해야합니다. 그러나 응용 프로그램에서 뮤텍스를 처리 할 필요가 없으므로 사용하기 쉽습니다.
samutamm

5

마지막으로 오늘 강의에서 세마포 대신 모니터를 사용하는 이유에 대해 논의했습니다.

기본적으로 모니터와 세마포어는 동일하게 표현되므로 원래 세마포어가 사용 된 모니터의 문제에 대한 해결책을 찾을 수 있으며 그 반대도 마찬가지입니다.

글쎄, 우리는 이미 그것을 알고 있었으므로 왜 세마포어 대신 모니터를 사용하겠습니까?

개인 취향. 일반적으로 데스크톱 응용 프로그램은 모니터를 사용하므로 실수 가능성이 적지 만 상대적으로 부풀어 오른 구조를 갖습니다. 반면에 세마포어는 운영 체제에서 종종 사용되는데, 경량 구조이므로 실수 가능성이 더 높습니다.

모니터 나 세마포어를 사용해야하는지 여부는 상황에 따른 결정이라고 결론 지을 수 있습니다. 실시간 시스템을 구축하는 경우 세마포어를 사용하고 싶거나 사무실 프로그램을 구축하는 경우 모니터도 함께 사용할 수 있습니다.


1

예를 들어 "작은 sempaphores의 책"을 들여다Allen B. 다우니 많은 동기화 문제를 설명하고 해결합니다. 특히 botched 솔루션을 확인하면 세마포어가 매우 낮은 수준의 메카니즘이고 매우 강력하지만 잘못 사용하기 쉬운 단순한 실수가 끔찍한 결과를 낳는 경우가 있습니다 (동시 프로그램의 고유 한 비 결정적 조작으로 인해 더 악화됨). 예를 들어, 상호 배제, 잘못된 세마포어에서의 작동 등을 잊어 버리는 것은 쉬운 일이다. 모니터는 가장 빈번하게 사용되는 경우에 사전 패키지 된 솔루션을 제공하고 객체 지향 프로그래밍의 장점을 최대한 활용합니다 (즉, 모니터에서 관리하는 변수를 망칠 수있는 유일한 방법은 작업을 통한 것임). 단점은 객체 지향이 아닌 언어로 쉽게 개조 할 수 없다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.