문제

a의 차이점은 무엇입니까? 감시 장치 그리고 a 자물쇠?

잠금이 단순히 상호 배제의 구현 인 경우, 모니터는 단순히 방법 실행 사이의 대기 시간을 사용하는 방법입니까?

좋은 설명은 정말 도움이 될 것입니다 ....

문안 인사

도움이 되었습니까?

해결책

예를 들어 C# .net에서 잠금 문은 다음과 같습니다.

Monitor.Enter(object);
try
{
    // Your code here...
}
finally
{
    Monitor.Exit(object);
}

그러나 모니터도 할 수 있습니다 Wait() 그리고 Pulse(), 복잡한 멀티 스레딩 상황에서 종종 유용합니다.

편집하다:.NET 프레임 워크의 이후 버전에서 다음으로 변경되었습니다.

bool lockTaken = false;
try
{
    Monitor.Enter(object, ref lockTaken);
    // Your code here...
}
finally
{
    if (lockTaken)
    {
        Monitor.Exit(object);
    }
}

다른 팁

그들은 관련이 있습니다. 예를 들어 C#에서 자물쇠 진술은 간단한 시도 래퍼입니다 모니터 입력 그리고 하나를 종료합니다 완료되면.

모니터는 컴파일러 보조 "반자동"잠금 장치입니다. 그들은 선언 할 수 있도록 허용합니다 synchronized 클래스 등의 방법. 이것은 상호 배제를 제공하는 다른 접근법 일뿐입니다. 나는 찾았다 이 책 개념에 대한 가장 철저한 설명이지만 대부분 OS 개발자를 대상으로합니다.

잠금은 상호 배제를 보장합니다.

모니터는 보호 할 데이터와 데이터에 대한 액세스를 보호하는 데 필요한 상호 제외 및 동기화 프리미티브를 연관시킵니다.
동기화는 예를 들어 이벤트가 발생할 때까지 하나의 스레드가 필요할 때 사용됩니다 (예 : 다른 스레드가 큐에 항목을 놓을 때까지 기다립니다).

모니터는 Semiphores/Locks와 동일한 작업을 수행하는 프로그래밍 언어 구성이지만 모니터는 실행 시간에 동기화하여 공유 데이터를 제어합니다. 대조적으로, 잠금은 공유 데이터를 "회전"하여 공유 데이터를 보호하여 CPU 활용이 불량 할 수 있습니다.

차이가없고, 잠금 장치가 모니터를 생성합니다. 엔터 및 모니터 .exit는 시도/마침내 블록 내에 있습니다. 모니터 오버 잠금 장치를 사용하면 맥박과 pulseall이 있으므로 미세 조정할 수 있습니다. Tryenter로 잠금을 얻을 수없는 경우 대체 처리를 가질 수도 있습니다.

상호 흥미로만 집중하지만 Moniter는 상호 배제를 자동으로 제공합니다.

따라서 모니터에서 상호 배제를 사용하는 것에 대해 걱정할 필요가 없습니다. 나 대신에 우리는 프로그래밍 할 때만 Sycronzing에 대해 동의해야합니다.

Moniter는보다 체계적인 프로그래밍 방법을 제공합니다. 따라서, 그것은 더 진보 된 것입니다.

모니터는 개념이며 잠금은 실제 구현입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top