2009-05-23 6 views
11

Was ist der Unterschied zwischen einer monitor und einer lock?Unterschied zwischen Monitor und Schloss?

Wenn eine Sperre einfach eine Implementierung gegenseitiger Ausschluss ist, ist ein Monitor dann einfach eine Möglichkeit, die Wartezeit zwischen den Methodenausführungen zu nutzen?

Eine gute Erklärung hilfreich Dank sein würde wirklich ....

Grüße

Antwort

13

Zum Beispiel in C# .NET eine lock-Anweisung entspricht:

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

aber bedenken Sie, dass Monitor kann auch Wait() und Pulse(), die in komplexen Multi-Threading Situationen oft nützlich sind.

Edit: In späteren Versionen von .NET Framework wurde diese folgendermaßen geändert:

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

@John Gietzen: genial ...Danke für die großartige Erklärung. – IAbstract

1

Monitore sind Compiler-assistierte "halbautomatischen" Schleusen. Sie erlauben es, synchronized Methoden auf Klassen usw. zu deklarieren. Dies ist nur ein anderer Ansatz zum gegenseitigen Ausschluss. Ich fand this book die gründlichste Erklärung der Konzepte, obwohl es hauptsächlich auf OS-Entwickler ausgerichtet ist.

0

Ein Schloss sorgt für gegenseitigen Ausschluss.

Ein Monitor ordnet die zu schützenden Daten und die zum Schutz der Zugriffe auf die Daten erforderlichen wechselseitigen Ausschluss- und Synchronisationsgrundelemente zu.
Synchronisation wird z.B. Wenn Sie einen Thread benötigen, um zu warten, bis ein Ereignis eintritt (z. B. warten Sie, bis ein anderer Thread ein Element in eine Warteschlange platziert).

0

Monitore ist ein Programmiersprachenkonstrukt, das dasselbe wie Semiphores/Locks ausführt, aber Monitore steuern die gemeinsam genutzten Daten durch die Synchronisierung zur Laufzeit. Im Gegensatz dazu schützen Sperren die gemeinsamen Daten durch einfaches "Drehen", was zu einer schlechten CPU-Auslastung führen kann.

-1

Lock Fokus auf nur gegenseitigen Ausschluß, aber Moniter bietet gegenseitigen Ausschluss automatisch.

So müssen wir uns keine Sorgen über den gegenseitigen Ausschluss in Monitor machen. Anstelle von ME müssen wir nur dann sycronisieren, wenn wir programmieren.

Moniter bietet mehr systematische Programmierung. Es ist daher fortgeschrittener.

0

Es gibt keinen Unterschied, Sperre erzeugt Monitor.Enter und Monitor.Exit innerhalb eines try/finally-Blocks. Wenn Sie "Monitor over lock" verwenden, können Sie Feineinstellungen vornehmen, da Pulse und PulseAll vorhanden sind. Sie können auch eine alternative Verarbeitung durchführen, wenn Sie die Sperre nicht mit TryEnter erfassen können.

-1

Monitor ist das Konzept und Lock ist die eigentliche Implementierung.