모니터와 잠금의 차이?
-
05-09-2019 - |
해결책
예를 들어 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);
}
}
다른 팁
모니터는 컴파일러 보조 "반자동"잠금 장치입니다. 그들은 선언 할 수 있도록 허용합니다 synchronized
클래스 등의 방법. 이것은 상호 배제를 제공하는 다른 접근법 일뿐입니다. 나는 찾았다 이 책 개념에 대한 가장 철저한 설명이지만 대부분 OS 개발자를 대상으로합니다.
잠금은 상호 배제를 보장합니다.
모니터는 보호 할 데이터와 데이터에 대한 액세스를 보호하는 데 필요한 상호 제외 및 동기화 프리미티브를 연관시킵니다.
동기화는 예를 들어 이벤트가 발생할 때까지 하나의 스레드가 필요할 때 사용됩니다 (예 : 다른 스레드가 큐에 항목을 놓을 때까지 기다립니다).
모니터는 Semiphores/Locks와 동일한 작업을 수행하는 프로그래밍 언어 구성이지만 모니터는 실행 시간에 동기화하여 공유 데이터를 제어합니다. 대조적으로, 잠금은 공유 데이터를 "회전"하여 공유 데이터를 보호하여 CPU 활용이 불량 할 수 있습니다.
차이가없고, 잠금 장치가 모니터를 생성합니다. 엔터 및 모니터 .exit는 시도/마침내 블록 내에 있습니다. 모니터 오버 잠금 장치를 사용하면 맥박과 pulseall이 있으므로 미세 조정할 수 있습니다. Tryenter로 잠금을 얻을 수없는 경우 대체 처리를 가질 수도 있습니다.
상호 흥미로만 집중하지만 Moniter는 상호 배제를 자동으로 제공합니다.
따라서 모니터에서 상호 배제를 사용하는 것에 대해 걱정할 필요가 없습니다. 나 대신에 우리는 프로그래밍 할 때만 Sycronzing에 대해 동의해야합니다.
Moniter는보다 체계적인 프로그래밍 방법을 제공합니다. 따라서, 그것은 더 진보 된 것입니다.
모니터는 개념이며 잠금은 실제 구현입니다.