[multithreading] 세마포어 대 모니터-차이점은 무엇입니까?

모니터세마포 의 주요 차이점은 무엇입니까 ?



답변

모니터는 여러 스레드에서 액세스 할 수 있도록 설계 객체입니다. 모니터 오브젝트의 멤버 함수 또는 메소드는 상호 배제를 강제하므로 주어진 시간에 하나의 스레드 만 오브젝트에 대한 조치를 수행 할 수 있습니다. 하나의 스레드가 현재 오브젝트의 멤버 함수를 실행중인 경우 해당 오브젝트의 멤버 함수를 호출하려는 다른 스레드는 첫 번째가 완료 될 때까지 기다려야합니다.

세마포어는 낮은 수준의 개체입니다. 세마포어를 사용하여 모니터를 구현할 수 있습니다. 세마포어는 본질적으로 카운터 일뿐입니다. 카운터가 양수이면 스레드가 세마포어를 얻으려고 시도하면 허용되고 카운터가 감소합니다. 스레드가 완료되면 세마포어를 해제하고 카운터를 증가시킵니다.

스레드가 세마포어를 얻으려고 할 때 카운터가 이미 0이면 다른 스레드가 세마포어를 해제 할 때까지 기다려야합니다. 스레드가 세마포어를 해제 할 때 여러 스레드가 대기중인 경우 스레드 중 하나가 해당 스레드를 가져옵니다. 세마포어를 해제하는 스레드는이를 획득 한 스레드와 동일하지 않아도됩니다.

모니터는 공중 화장실과 같습니다. 한 번에 한 사람 만 입장 할 수 있습니다. 그들은 다른 사람이 들어오지 못하도록 물건을 잠그고 물건을 한 다음 떠날 때 잠금을 해제합니다.

세마포어는 자전거 대여 장소와 같습니다. 그들은 특정 수의 자전거를 가지고 있습니다. 자전거를 대여하려고하는데 자전거가 무료 인 경우 자전거를 탈 수 있습니다. 그렇지 않으면 기다려야합니다. 누군가 자전거를 반환하면 다른 사람이 자전거를 탈 수 있습니다. 자전거를 가지고 있다면 자전거를 다른 사람에게 돌려 줄 수 있습니다.-자전거 대여 장소는 자전거를 돌려받는 한 자전거를 반납하는 사람을 신경 쓰지 않습니다.


답변

다음 설명은 실제로 모니터의 wait () 및 signal ()이 세마포어의 P 및 V와 어떻게 다른지 설명합니다.

대기 ()신호 () A의 조건 변수에 대한 연산 모니터 유사한 PV의 계산에 연산 세마포어 .

대기 명령문 은 프로세스의 실행을 차단할 수있는 반면 신호 명령문 은 다른 프로세스의 차단을 해제 할 수 있습니다. 그러나 약간의 차이가 있습니다그들 사이에. 프로세스가 P 연산을 실행할 때 카운팅 세마포어가 0보다 클 수 있으므로 반드시 해당 프로세스를 차단하지는 않습니다. 반대로 대기 명령문이 실행될 때 항상 프로세스를 차단합니다. 작업이 세마포어에서 V 작업을 실행하면 해당 세마포어에서 대기중인 작업이 차단 해제되거나 잠금 해제 할 작업이 없으면 세마포어 카운터가 증가합니다. 반면, 차단 해제 할 다른 프로세스가 없을 때 프로세스가 신호 명령문을 실행하면 조건 변수에 영향을 미치지 않습니다. 세마포어와 모니터의 또 다른 차이점은 V 작업으로 깨어 난 사용자가 지연없이 실행을 다시 시작할 수 있다는 것입니다. 반대로, 신호 조작으로 깨어 난 사용자는 모니터가 잠금 해제 된 경우에만 다시 시작됩니다. 게다가,

링크 : 자세한 내용은 여기참조하십시오 . 도움이 되길 바랍니다.


답변

한 줄 답변 :

모니터 : 한 번에 하나의 스레드 만 모니터 에서 실행할 수 있도록 제어합니다. (단일 스레드를 실행하기 위해 잠금을 획득해야 함)

세마포어 : 공유 리소스를 보호하는 잠금. (자원에 액세스하려면 잠금을 획득해야 함)


답변

세마포어를 사용하면 여러 스레드 (최대 설정된 수)가 공유 객체에 액세스 할 수 있습니다. 모니터는 공유 객체에 대한 상호 배타적 액세스를 허용합니다.

감시 장치

신호기


답변

세마포어가 임계 영역을 보호하기 위해 사용되는 경우, 세마포어와 보호되는 데이터 사이에는 직접적인 관계가 없습니다. 이것은 세마포어가 코드 주위에 분산되는 이유의 일부이며, wait 또는 notify 호출을 잊어 버리기 쉬운 이유 중 하나입니다 .이 경우 각각 상호 배제를 위반하거나 자원을 영구적으로 잠그는 결과가 발생합니다.

반대로, 이러한 나쁜 일에 대해서는 모니터로 발생할 수 있습니다. 모니터는 데이터에 직접 영향을 받고 (데이터를 캡슐화 함) 모니터 조작은 원자적인 조치이므로 입력 프로토콜을 호출하지 않고 데이터에 액세스 할 수있는 코드를 작성할 수 없습니다. 모니터 조작이 완료되면 종료 프로토콜이 자동으로 호출됩니다.

모니터에는 진행하기 전에 조건 변수의 형태로 조건 동기화를위한 내장 메커니즘이 있습니다. 조건이 충족되지 않으면 프로세스는 조건 변경을 알릴 때까지 기다려야합니다. 프로세스가 조건 동기화를 기다리는 경우 모니터 구현은 상호 배제 문제를 처리하고 다른 프로세스가 모니터에 액세스 할 수 있도록합니다.

Open University M362 3 단원 “상호 작용 과정”과정 자료에서 발췌.


답변

세마포어 :

동시 시스템에서 일부 공유 자원에 대한 액세스를 제어하기 위해 카운터 또는 플래그 사용, 세마포어 사용을 의미 .

예:

  1. 극장 / 버스 / 기차 / 유람선 / 교실의 50 석 (공동 자원)을 50 명만 입수 할 수있는 카운터. 누군가 좌석을 비운 경우에만 새로운 승객을 허용합니다.
  2. 욕실의 약속 있음 / 없음 상태를 나타내는 이진 플래그입니다.
  3. 신호등은 플래그의 좋은 예입니다. 도로상의 차량 통과를 통제하여 흐름을 제어합니다 (공유 자원)

플래그는 자원의 현재 상태 만 나타내며, 자원에서 대기 중이거나 실행중인 오브젝트에 대한 수 또는 기타 정보는 표시되지 않습니다.

모니터 :

모니터 몇 가지 조건이 true가 될 때까지 획득 액세스 또는 대기하도록 요청 객체에 관심이 스레드와 통신하여 개체에 대한 액세스를 동기화합니다.

예:

  1. 아버지는 딸의 모니터 역할을하여 한 번에 한 사람 만 데이트 할 수 있습니다.
  2. 배턴을 사용하여 한 명의 어린이 만 수업에 참여할 수 있도록하는 학교 교사.
  3. 마지막으로 계정 개체의 트랜잭션 (스레드를 통한)은 무결성을 유지하기 위해 동기화됩니다.

답변