2009-05-23 19 views
11

Jaka jest różnica między monitor a lock?Różnica między monitorem i blokadą?

Jeśli blokada jest po prostu implementacją wzajemnego wykluczania, to czy monitor jest po prostu sposobem na wykorzystanie czasu oczekiwania pomiędzy wykonaniem metody?

dobre wyjaśnienie byłoby bardzo pomocne dzięki ....

pozdrowienia

Odpowiedz

13

Na przykład w C# .NET zamek stwierdzenie jest równoznaczne z:

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

jednak pamiętać, że monitor może również Wait() i Pulse(), które często są przydatne w skomplikowanych sytuacjach wielowątkowości.

Edit: W nowszych wersjach systemu .NET Framework, to została zmieniona na:

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

@John Gietzen: niesamowite ...thx za wspaniałe wyjaśnienie. – IAbstract

1

monitory są kompilatora-assisted "półautomatyczne" zamki. Pozwalają one deklarować metody na zajęciach itp. Jest to po prostu odmienne podejście do zapewnienia wzajemnego wykluczenia. Uważam, że this book jest najdokładniejszym wyjaśnieniem tych pojęć, mimo że jest skierowany głównie do programistów systemów operacyjnych.

0

Zamek zapewnia wzajemne wykluczenie.

Monitor łączy dane, które mają być chronione, oraz prymitywy wzajemnego wykluczania i synchronizacji wymagane do ochrony dostępu do danych.
Synchronizacja jest używana np. gdy potrzebujesz jednego wątku do oczekiwania na zdarzenie (np. poczekaj, aż inny wątek umieści element w kolejce).

0

Monitory to konstrukcja języka programowania, która działa tak samo, jak semifory/blokady, ale Monitory sterują udostępnianymi danymi przez synchronizację w czasie wykonywania. Natomiast zamki chronią udostępniane dane przez "wirowanie", co może prowadzić do złego wykorzystania procesora.

-1

Zablokuj fokus tylko na wzajemnym wykluczeniu, ale Moniter automatycznie wyklucza wzajemne wykluczenie.

Nie musimy się więc martwić o stosowanie wzajemnego wykluczenia w Monitorze. Zamiast ME, musimy zachować sycronzing tylko podczas programowania.

Moniter zapewnia bardziej systematyczny sposób programowania. To jest bardziej zaawansowane.

0

Nie ma różnicy, blokada generuje Monitor.Enter i Monitor.Zakończ w bloku try/finally. Korzystanie z funkcji Monitor over lock pozwala na precyzyjne dostrajanie, ponieważ posiada funkcję Pulse i PulseAll. Jeśli nie można uzyskać blokady za pomocą TryEnter, można również wykonać alternatywne przetwarzanie.

-1

Monitor to koncepcja, a blokada to rzeczywiste wdrożenie.