모니터 와 세마포 의 주요 차이점은 무엇입니까 ?
모니터 와 세마포 의 주요 차이점은 무엇입니까 ?
답변:
모니터는 여러 스레드에서 액세스 할 수 있도록 설계 객체입니다. 모니터 오브젝트의 멤버 함수 또는 메소드는 상호 배제를 강제하므로 주어진 시간에 하나의 스레드 만 오브젝트에 대한 조치를 수행 할 수 있습니다. 하나의 스레드가 현재 오브젝트의 멤버 함수를 실행중인 경우 해당 오브젝트의 멤버 함수를 호출하려는 다른 스레드는 첫 번째가 완료 될 때까지 기다려야합니다.
세마포어는 낮은 수준의 개체입니다. 세마포어를 사용하여 모니터를 구현할 수 있습니다. 세마포어는 본질적으로 카운터 일뿐입니다. 카운터가 양수이면 스레드가 세마포어를 얻으려고 시도하면 허용되고 카운터가 감소합니다. 스레드가 완료되면 세마포어를 해제하고 카운터를 증가시킵니다.
스레드가 세마포어를 얻으려고 할 때 카운터가 이미 0이면 다른 스레드가 세마포어를 해제 할 때까지 기다려야합니다. 스레드가 세마포어를 해제 할 때 여러 스레드가 대기중인 경우 스레드 중 하나가 해당 스레드를 가져옵니다. 세마포어를 해제하는 스레드는이를 획득 한 스레드와 동일하지 않아도됩니다.
모니터는 공중 화장실과 같습니다. 한 번에 한 사람 만 입장 할 수 있습니다. 그들은 다른 사람이 들어오지 못하도록 물건을 잠그고 물건을 한 다음 떠날 때 잠금을 해제합니다.
세마포어는 자전거 대여 장소와 같습니다. 그들은 특정 수의 자전거를 가지고 있습니다. 자전거를 대여하려고하는데 자전거가 무료 인 경우 자전거를 탈 수 있습니다. 그렇지 않으면 기다려야합니다. 누군가 자전거를 반환하면 다른 사람이 자전거를 탈 수 있습니다. 자전거를 가지고 있다면 자전거를 다른 사람에게 돌려 줄 수 있습니다.-자전거 대여 장소는 자전거를 돌려받는 한 자전거를 반납하는 사람을 신경 쓰지 않습니다.
다음 설명은 실제로 모니터의 wait () 및 signal ()이 세마포어의 P 및 V와 어떻게 다른지 설명합니다.
대기 () 와 신호 () A의 조건 변수에 대한 연산 모니터 유사한 P 와 V의 계산에 연산 세마포어 .
대기 명령문 은 프로세스의 실행을 차단할 수있는 반면 신호 명령문 은 다른 프로세스의 차단을 해제 할 수 있습니다. 그러나 약간의 차이가 있습니다그들 사이에. 프로세스가 P 연산을 실행할 때 카운팅 세마포어가 0보다 클 수 있으므로 반드시 해당 프로세스를 차단하지는 않습니다. 반대로 대기 명령문이 실행될 때 항상 프로세스를 차단합니다. 작업이 세마포어에서 V 작업을 실행하면 해당 세마포어에서 대기중인 작업이 차단 해제되거나 잠금 해제 할 작업이 없으면 세마포어 카운터가 증가합니다. 반면, 차단 해제 할 다른 프로세스가 없을 때 프로세스가 신호 명령문을 실행하면 조건 변수에 영향을 미치지 않습니다. 세마포어와 모니터의 또 다른 차이점은 V 작업으로 깨어 난 사용자가 지연없이 실행을 다시 시작할 수 있다는 것입니다. 반대로, 신호 조작으로 깨어 난 사용자는 모니터가 잠금 해제 된 경우에만 다시 시작됩니다. 게다가,
java.util.ArrayList
: 여러 객체의 객체 또는 컨테이너입니까? 글쎄, 둘 다 동시에입니다. 따라서 세마포어가 액세스를 제어하는 데 적합합니까? 나는 말할 것입니다 : 아니오.
세마포어가 임계 영역을 보호하기 위해 사용되는 경우, 세마포어와 보호되는 데이터 사이에는 직접적인 관계가 없습니다. 이것은 세마포어가 코드 주위에 분산되는 이유의 일부이며, wait 또는 notify 호출을 잊어 버리기 쉬운 이유 중 하나입니다 .이 경우 각각 상호 배제를 위반하거나 자원을 영구적으로 잠그는 결과가 발생합니다.
반대로, 이러한 나쁜 일에 대해서는 모니터로 발생할 수 있습니다. 모니터는 데이터에 직접 영향을 받고 (데이터를 캡슐화 함) 모니터 조작은 원자적인 조치이므로 입력 프로토콜을 호출하지 않고 데이터에 액세스 할 수있는 코드를 작성할 수 없습니다. 모니터 조작이 완료되면 종료 프로토콜이 자동으로 호출됩니다.
모니터에는 진행하기 전에 조건 변수의 형태로 조건 동기화를위한 내장 메커니즘이 있습니다. 조건이 충족되지 않으면 프로세스는 조건 변경을 알릴 때까지 기다려야합니다. 프로세스가 조건 동기화를 기다리는 경우 모니터 구현은 상호 배제 문제를 처리하고 다른 프로세스가 모니터에 액세스 할 수 있도록합니다.
Open University M362 3 단원 "상호 작용 과정"과정 자료에서 발췌.
세마포어 :
동시 시스템에서 일부 공유 자원에 대한 액세스를 제어하기 위해 카운터 또는 플래그 사용, 세마포어 사용을 의미 .
예:
플래그는 자원의 현재 상태 만 나타내며, 자원에서 대기 중이거나 실행중인 오브젝트에 대한 수 또는 기타 정보는 표시되지 않습니다.
모니터 :
모니터 몇 가지 조건이 true가 될 때까지 획득 액세스 또는 대기하도록 요청 객체에 관심이 스레드와 통신하여 개체에 대한 액세스를 동기화합니다.
예: