2016-04-19 3 views
-1

NET-Threading-Experten,Wann verwenden Sie lock und unnamed Mutex in .NET?

Ich weiß, dass Sperre über Threads innerhalb eines Prozesses funktioniert und "benannte Mutex" funktioniert über Prozesse hinweg. Allerdings scheint 'unbenannter Mutex' auch über Threads zu funktionieren (ähnlich wie Lock). Kann jemand nun das Licht auf echte Weltnutzungen von ungenannten Sperren werfen, mit denen das Schloss nicht umgehen kann?

Vielen Dank im Voraus!

+1

C# -Sperren sind über Mutex implementiert, und beide dienen demselben Zweck. Mutex sind jedoch Low-Level-und verwaltet Antwort auf OS Mutex. – Saleem

+0

Es gibt mehrere Möglichkeiten, die Thread-Synchronisierung in .NET zu implementieren. Das * lock * -Schlüsselwort ist eine einfache Abstraktion für die Monitor-Klasse und sehr oft verwendbar wie es ist. Außerdem stehen Ihnen die Klassen Mutex, Semaphore/Slim, AutoResetEvent, ManualResetEvent/Slim, CountDownEvent und ReaderWriterLock/Slim zur Verfügung. Ein bisschen wichtig zu wissen, was sie tun können, um zu wissen, wann sie zu verwenden sind, ist es bereits sehr gut in der MSDN-Dokumentation und vielen Webseiten abgedeckt. –

Antwort

1

Mutexes kann als Parameter an eine Funktion übergeben werden, Sperren können nicht. Mutexe sind auch MarshalByRefObject, also kann zwischen AppDomains übergeben werden.

Es gibt Situationen, in denen Sie AppDomains innerhalb eines Programms sperren möchten, da Sie einen unbenannten Mutex verwenden können.

lock ist auf Low-Level-Mutexe mit etwas Logik auf sie angewendet, und Mutex ist nur eine direkt verwaltete Wrapper dieser Low-Level-Mutexe. Denke nicht daran, dass es eine Entweder-Oder-Situation ist, denke stattdessen eher an die Beziehung TcpClient vs WebClient, du kannst TcpClient verwenden, um alle Dinge zu tun, aber es ist einfacher, die höhere Abstraktionsebene zu verwenden Ihre Arbeit.

+0

Thnx Scott für Ihre Antwort. Du meinst Mutex ist abstrakter als Schloss? –

+0

Ich würde eine "Sperre" "abstrakter" nennen, weil es OS-Mutexe nicht direkt manipuliert, wie 'Mutex' tut. –

Verwandte Themen