Frage

Im C#, wenn wir verwenden sollten WaitHandle Anstatt von lock ?

War es hilfreich?

Lösung

Ein Schloss unterscheidet sich grundlegend von a WaitHandle. Mit einem Schloss, das Sie schreiben, zum Beispiel:

lock (SomeResource)
{
    // do stuff here
}

In der ersten Zeile heißt es: "Ich möchte einen exklusiven Zugriff auf diese Ressource" und wird warten, bis diese Ressource verfügbar ist (dh niemand sonst hat eine Sperre dafür). Dann wird der Code ausgeführt und am Ende wird das Schloss veröffentlicht, damit andere ihn verwenden können.

WaitHandle wird verwendet, um auf eine Veranstaltung zu warten. Wenn Sie schreiben:

MyWaitHandle.WaitOne();

Ihr Code wartet auf einen anderen Thread (möglicherweise in einem anderen Prozess), um dies zu signalisieren WaitHandle. Was es signalisiert, könnte alles sein. Vielleicht warten Sie darauf, dass ein weiterer Thread seinen Job beendet und sagt: "Ich bin jetzt fertig", bevor Ihr Code fortgesetzt wird.

Um Ihre Frage zu beantworten, sollten Sie ein Schloss verwenden, wenn Sie exklusiven Zugriff auf eine Ressource erhalten möchten. Du solltest benutzen WaitHandle Wenn Sie über ein Ereignis informiert werden möchten.

Andere Tipps

Ein Wartenhandel kann auf mehrere Griffe warten, ein Schloss kann nur auf einen warten.

Wenn du es brauchst. Im Ernst, Lock ist syntaktischer Zucker mit Monitor, was wahrscheinlich innen Waits verwendet.

Verwenden Sie es nur, wenn Sie mehr Flexibilität benötigen (wie z. B. das Halten an einem Schloss länger als im aktuellen Bereich ...) oder mehrere Sperren in der richtigen Reihenfolge usw. verwalten usw.

Sie erreichen völlig unterschiedliche Dinge. EIN lock wird verwendet, um den Zugriff auf einen bestimmten Codeblock auf a zu begrenzen Single Faden nach dem anderen. EIN WaitHandle ist die Basisklasse für mehrere gleichzeitbedingte Klassen, wie z. Semaphore, Mutex, AutoResetEvent, und ManualResetEvent, die es Ihnen ermöglichen, die Parallelität auf etwas unterschiedliche Weise zu steuern. Zum Beispiel a Semaphore ermöglicht es Ihnen, die Parallelität auf zu begrenzen nicht mehr als N Themen anstelle eines einzelnen Threads.

WaitHandle Wird oft verwendet, wenn Sie mehrere Threads laufen lassen und auf eine oder alle abgeschlossen werden möchten, bevor Sie weiterhin andere Aktionen ausführen. lock würde verwendet, wenn Sie verhindern möchten, dass mehrere Threads gleichzeitig auf eine gemeinsam genutzte Ressource zugreifen.

Die beste Erklärung liegt in diesen beiden Links. Leider müssen Sie etwas lesen, um eine vollständige Antwort auf die Art von Frage zu erhalten, die Sie gestellt haben:

Dies enthält auch ein Beispiel:http://msdn.microsoft.com/en-us/library/system.threading.waitandle.aspx

http://msdn.microsoft.com/en-us/library/kad9xah9.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top