Inhaltsverzeichnis
1. Abstrakte Basisklasse WaitHandle
2. Mutex (Prozesssynchronisationssperre)
1. MSDN definiert Mutex als das Synchronisationsprimitiv zwischen Prozessen, also das Konzept der Sperre.
2. Verwendung von Mutex
4、用途 
Heim Backend-Entwicklung C#.Net-Tutorial Detaillierte Erläuterung der .NET-Synchronisation und des asynchronen Mutex

Detaillierte Erläuterung der .NET-Synchronisation und des asynchronen Mutex

Mar 26, 2017 pm 04:10 PM

Dieser Aufsatz fährt fort: .NET-Synchronisierung und asynchrone Thread-sichere Sammlung (11)

Dieser Aufsatz und die nächsten beiden Aufsätze stellen den letzten großen Teil der Wissenspunkte zu .NET-Synchronisierung und asynchronem Block vor : WaitHandle-Familie.

Abstrakte Basisklasse: WaitHandle, drei Unterklassen: EventWaitHandle (Ereignisbenachrichtigung), Mutex (Prozesssynchronisationssperre), Semaphone (Semaphor) und zwei Enkel: System.Threading.AutoResetEvent, System Unterklassen von EventWaitHandle.

1. Abstrakte Basisklasse WaitHandle

[ComVisibleAttribute(true)]public abstract class WaitHandle : MarshalByRefObject, IDisposable
Nach dem Login kopieren

Anhand der obigen Informationen können wir erkennen, dass WaitHandle von MarshalByRefObject erbt und die IDisposable-Schnittstelle implementiert.

Sie sind vielleicht nicht sehr vertraut mit MarshalByRefObject, aber Sie werden sicherlich viele seiner Unterklassen verwendet haben. Lassen Sie uns sein wahres Gesicht enthüllen.

MarshalByRefObject wird in MSND wie folgt beschrieben:

Die Anwendungsdomäne ist eine Partition, in der sich eine oder mehrere Anwendungen in einem Betriebssystemprozess befinden. Objekte in derselben Anwendungsdomäne kommunizieren direkt. Objekte in verschiedenen Anwendungsdomänen können auf zwei Arten kommunizieren: durch die Übertragung von Objektkopien über Anwendungsdomänengrenzen hinweg oder durch die Verwendung von Proxys zum Austausch von Nachrichten. MarshalByRefObject ist eine Basisklasse für Objekte, die über Anwendungsdomänengrenzen hinweg kommunizieren, indem sie Nachrichten mithilfe von Proxys austauschen.

Sie sind möglicherweise verwirrter, nachdem Sie das gesehen haben. Habe ich es verwendet? Seine Unterklassen verwendet? Das ist richtig, seine Unterklassen wurden verwendet und es gibt noch viele weitere.

Zum Beispiel Pinsel, Bild, Stift, Schriftart usw. im System.Drawing-Namespace, und es gibt auch einen bekannteren Stream unter dem System.IO-Namespace.

Erweiterte Lektüre: Verwenden Sie MarshalByRefObject, um AOP zu implementieren.

Da wir dies sehen, müssen wir nur wissen, dass WaitHandle die Fähigkeit hat, über Anwendungsdomänen hinweg zu kommunizieren.

2. Mutex (Prozesssynchronisationssperre)

1. MSDN definiert Mutex als das Synchronisationsprimitiv zwischen Prozessen, also das Konzept der Sperre.

Andererseits wird Monitor normalerweise nur für die Kommunikation zwischen Threads in der Anwendungsdomäne verwendet. Tatsächlich kann Monitor auch Sperren in mehreren Anwendungsdomänen bereitstellen, wenn das für die Sperre verwendete Objekt von MarshalByRefObject abgeleitet ist.

Da Mutex Betriebssystemressourcen aufrufen muss, ist sein Ausführungsaufwand viel größer als bei Monitor. Wenn Sie daher nur Vorgänge zwischen Threads innerhalb der Anwendung synchronisieren müssen, sollte Monitor/Lock die erste Wahl sein

2. Verwendung von Mutex

  • WaitOne() /WaitOne(TimeSpan, Boolean) und mehrere Überladungen: Besitz anfordern, dieser Aufruf wird blockiert, bis der aktuelle Mutex ein Signal empfängt, oder bis Wenn das optionale Timeout-Intervall erreicht ist, muss keine dieser Methoden ein Sperrobjekt als zusätzlichen Parameter bereitstellen.

    • Sie können die WaitHandle.WaitOne-Methode verwenden, um den Besitz eines Mutex anzufordern. Der aufrufende Thread wird blockiert, bis eines der folgenden Ereignisse eintritt:

    • Der Mutex signalisiert Nichtbesitz. In diesem Fall gibt die WaitOne-Methode true zurück, übernimmt den Mutex-Besitz des aufrufenden Threads und greift auf die durch den Mutex geschützte Ressource zu. Nachdem der Thread den Zugriff auf Ressourcen abgeschlossen hat, muss die ReleaseMutex-Methode aufgerufen werden, um den Besitz des Mutex freizugeben.

    • hat die Methode millisecondsTimeout oder den Parameter timeout übergeben . In diesem Fall gibt die WaitOne-Methode false zurück und der Thread übernimmt zu diesem Zeitpunkt nicht den Besitz des Mutex.

  • ReleaseMutex(): Gibt den aktuellen Mutex einmal frei. Beachten Sie, dass dies einmal hervorgehoben wird, da der Thread, dem der Mutex gehört, die WaitOne-Funktionsreihe wiederholt aufrufen kann, ohne seine Ausführung zu blockieren, und Enter()/Exit() des Monitors wiederholt aufgerufen werden kann, nachdem die Objektsperre erworben wurde. Die Anzahl der Mutex-Aufrufe wird von der Common Language Runtime (CLR) gespeichert. Die Anzahl beträgt +1 für jeden WaitOne() und -1 für jeden ReleaseMutex() Betrachten Sie diesen Mutex. Wenn er nicht freigegeben wird, gibt es keine Möglichkeit, den Mutex zu erhalten. Darüber hinaus kann wie bei Monitor.Exit() nur der Besitzer des Mutex RleaseMutex() verwenden, andernfalls wird eine Ausnahme ausgelöst.

  • Wenn der Thread beendet wird, während er den Mutex besitzt, sagen wir, dass der Mutex aufgegeben wurde. Im MSDN warnt Microsoft, dass es sich hierbei um einen „schwerwiegenden“ Programmierfehler handele. Dies bedeutet, dass die Anzahl von WaitOne() und ReleaseMutex() ungleich ist, nachdem der Besitzer des Mutex den Besitz erlangt hat und der Aufrufer selbst unverantwortlich beendet wird, was dazu führt, dass sich die durch den Mutex geschützte Ressource in einem inkonsistenten Zustand befindet. Tatsächlich ist dies nichts weiter als eine Erinnerung daran, daran zu denken, Mutex in der try/finally-Struktur zu verwenden.

3、全局和局部的Mutex

如果在一个应用程序域内使用Mutex,当然不如直接使用Monitor/lock更为合适,因为前面已经提到Mutex需要更大的开销而执行较慢。不过Mutex毕竟不是Monitor/lock,它生来应用的场景就应该是用于进程间同步的。用于在进程间通讯的Mutex我们称为全局Mutex,而只用于在应用程序域内部通讯的Mutex、我们称为局部Mutex.

全局Mutex和局部Mutex是通过构造函数来构造不同的实例的,让我们来看一下Mutex的构造函数,一共有5个,挑两个具有代表性的看一下吧:

  • Mutex():用无参数的构造函数得到的Mutex没有任何名称,而进程间无法通过变量的形式共享数据,所以没有名称的Mutex也叫做局部(Local)Mutex。另外,这样创建出的Mutex,创建者对这个实例并没有拥有权,仍然需要调用WaitOne()去请求所有权。

  • Mutex(Boolean initiallyOwned, String name, out Booldan createdNew, MutexSecurity):第一个bool参数:指示初始化的实例是否拥有互斥体所有权。第二个string类型、为互斥体指定一个名称,如果string为null或者空字符串 则相当于创建一个没有名字的Mutex,当属于局部Mutex. 而有名字的Mutex当属于全局Mutex.第三个bool参数、如果已经初始化了互斥体 返回True, 如果互斥体已经存在则返回False. 最后一个参数用于Mutex访问的安全性控制。

4、用途 

Mutex天生为进程间的同步基元,因此它可以用来控制应用程序的单实例

/// <summary>/// 单实例运行/// </summary>/// <returns> true 应用程序已启动,false 则没有 
</returns>public bool SingleRun(ref System.Threading.Mutex mutex )
{
    mutex = new System.Threading.Mutex(false, "WINDOWS");    
    if (!mutex.WaitOne(0, false))
    {
        mutex.Close();
        mutex = null;
    }    if (mutex == null)
    {        return true;
    }    return false;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der .NET-Synchronisation und des asynchronen Mutex. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Lösen Sie das Problem der gleichzeitigen Wiedergabe von Kopfhörern und Lautsprechern in Win11 Lösen Sie das Problem der gleichzeitigen Wiedergabe von Kopfhörern und Lautsprechern in Win11 Jan 06, 2024 am 08:50 AM

Im Allgemeinen müssen wir nur einen der Kopfhörer oder Lautsprecher gleichzeitig verwenden. Einige Freunde haben jedoch berichtet, dass sie im Win11-System auf das Problem gestoßen sind, dass Kopfhörer und Lautsprecher gleichzeitig klingen Schalten Sie es im Realtek-Panel aus und es ist in Ordnung. Schauen wir uns das unten an. Was soll ich tun, wenn meine Kopfhörer und Lautsprecher in Win11 zusammen klingen? 1. Suchen und öffnen Sie zuerst die „Systemsteuerung“ auf dem Desktop. 2. Rufen Sie die Systemsteuerung auf, suchen und öffnen Sie „Hardware und Sound“. „Realtek High Definition“ mit einem Lautsprechersymbol. „Audio Manager“ 4. Wählen Sie „Lautsprecher“ und klicken Sie auf „Rückseite“, um die Lautsprechereinstellungen einzugeben. 5. Nach dem Öffnen können wir den Gerätetyp sehen. Wenn Sie die Kopfhörer ausschalten möchten, deaktivieren Sie „Kopfhörer“.

Mar 18, 2024 am 09:46 AM

Wenn Sie feststellen, dass ein oder mehrere Elemente in Ihrem Synchronisierungsordner nicht mit der Fehlermeldung in Outlook übereinstimmen, kann dies daran liegen, dass Sie Besprechungselemente aktualisiert oder abgesagt haben. In diesem Fall wird eine Fehlermeldung angezeigt, die besagt, dass Ihre lokale Version der Daten mit der Remote-Kopie in Konflikt steht. Diese Situation tritt normalerweise in der Outlook-Desktopanwendung auf. Ein oder mehrere Elemente in dem von Ihnen synchronisierten Ordner stimmen nicht überein. Um den Konflikt zu lösen, öffnen Sie die Projekte und versuchen Sie den Vorgang erneut. Fix Ein oder mehrere Elemente in synchronisierten Ordnern stimmen nicht mit dem Outlook-Fehler überein. In der Outlook-Desktopversion können Probleme auftreten, wenn lokale Kalenderelemente mit der Serverkopie in Konflikt stehen. Glücklicherweise gibt es jedoch einige einfache Möglichkeiten, um zu helfen

Wie sind die Berufsaussichten von C#? Wie sind die Berufsaussichten von C#? Oct 19, 2023 am 11:02 AM

Ganz gleich, ob Sie Anfänger oder erfahrener Profi sind: Die Beherrschung von C# ebnet den Weg für Ihre Karriere.

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Die Entwicklung von Technologien der künstlichen Intelligenz (KI) ist heute in vollem Gange und sie haben in verschiedenen Bereichen großes Potenzial und Einfluss gezeigt. Heute wird Dayao Ihnen 4 .NET Open-Source-KI-Modell-LLM-bezogene Projekt-Frameworks vorstellen und hofft, Ihnen einige Referenzen zu geben. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ist ein Open-Source-Softwareentwicklungskit (SDK), das für die Integration großer Sprachmodelle (LLM) wie OpenAI und Azure entwickelt wurde

Erfahren Sie, wie Sie die Win10-Zwischenablage mit Ihrem Mobiltelefon synchronisieren Erfahren Sie, wie Sie die Win10-Zwischenablage mit Ihrem Mobiltelefon synchronisieren Jan 06, 2024 am 09:18 AM

Eine sehr nützliche Funktion der Win10-Zwischenablage ist die geräteübergreifende Cloud-Speicherfunktion, die sehr nützlich ist und Benutzern dabei helfen kann, gleichzeitig auf PC-Geräten und Mobilgeräten zu kopieren und einzufügen. Die Einstellungsmethode ist sehr einfach. Legen Sie sie einfach in der Zwischenablage im System fest. Win10-Zwischenablage mit Mobiltelefon synchronisieren 1. Klicken Sie zunächst unten links auf „Start“, um die Einstellungen einzugeben. 2. Klicken Sie anschließend auf „System“. 3. Wählen Sie links „Zwischenablage“. 4. Klicken Sie abschließend rechts unter „Geräteübergreifende Synchronisierung“ auf „Anmelden“ und wählen Sie dann Ihr Mobiltelefon aus.

Erweiterter Leitfaden zu Python Asyncio: Vom Anfänger zum Experten Erweiterter Leitfaden zu Python Asyncio: Vom Anfänger zum Experten Mar 04, 2024 am 09:43 AM

Gleichzeitige und asynchrone Programmierung Bei der gleichzeitigen Programmierung geht es um die gleichzeitige Ausführung mehrerer Aufgaben. Bei der asynchronen Programmierung handelt es sich um eine Art der gleichzeitigen Programmierung, bei der Aufgaben keine Threads blockieren. asyncio ist eine Bibliothek für die asynchrone Programmierung in Python, die es Programmen ermöglicht, I/O-Vorgänge auszuführen, ohne den Hauptthread zu blockieren. Ereignisschleife Der Kern von Asyncio ist die Ereignisschleife, die I/O-Ereignisse überwacht und entsprechende Aufgaben plant. Wenn eine Coroutine bereit ist, wird sie von der Ereignisschleife ausgeführt, bis sie auf E/A-Operationen wartet. Anschließend wird die Coroutine angehalten und die Ausführung anderer Coroutinen fortgesetzt. Coroutinen Coroutinen sind Funktionen, die die Ausführung anhalten und fortsetzen können. Das Schlüsselwort asyncdef wird zum Erstellen von Coroutinen verwendet. Die Coroutine verwendet das Schlüsselwort „await“, um auf den Abschluss des E/A-Vorgangs zu warten. Die folgenden Grundlagen von Asyncio

So synchronisieren Sie die Baidu-Cloud-Synchronisierungsdiskette So synchronisieren Sie die Baidu-Cloud-Synchronisierungsdiskette Feb 23, 2024 pm 01:22 PM

Wie synchronisiere ich Baidu Cloud Sync Disk? Sie können Dateien zur Synchronisierung in Baidu Cloud Sync Disk auswählen, aber die meisten Benutzer wissen nicht, wie sie Baidu Cloud Sync Disk-Dateien synchronisieren Für Interessierte kommen Sie vorbei! So synchronisieren Sie Baidu Cloud Sync Disk: 1. Rufen Sie zunächst den Computer-Desktop auf, klicken Sie mit der rechten Maustaste auf das Symbol [Baidu Cloud Sync Disk] und wählen Sie [Einstellungen]. 2. Erweitern Sie dann das Dienstfenster, wechseln Sie zur Seite [Erweiterte Einstellungen] und klicken Sie [Ordner auswählen]; 3. Wechseln Sie abschließend zur Seite unten, überprüfen Sie die Dateien, die synchronisiert werden müssen, und klicken Sie auf [OK].

Sperren und Synchronisierung in der gleichzeitigen Python-Programmierung: So bleibt Ihr Code sicher und zuverlässig Sperren und Synchronisierung in der gleichzeitigen Python-Programmierung: So bleibt Ihr Code sicher und zuverlässig Feb 19, 2024 pm 02:30 PM

Sperren und Synchronisierung bei der gleichzeitigen Programmierung Bei der gleichzeitigen Programmierung werden mehrere Prozesse oder Threads gleichzeitig ausgeführt, was zu Ressourcenkonflikten und Inkonsistenzproblemen führen kann. Um diese Probleme zu lösen, sind Sperren und Synchronisationsmechanismen erforderlich, um den Zugriff auf gemeinsam genutzte Ressourcen zu koordinieren. Konzept der Sperre Eine Sperre ist ein Mechanismus, der jeweils nur einem Thread oder Prozess den Zugriff auf eine gemeinsam genutzte Ressource ermöglicht. Wenn ein Thread oder Prozess eine Sperre erhält, wird der Zugriff anderer Threads oder Prozesse auf die Ressource blockiert, bis die Sperre aufgehoben wird. Arten von Sperren Es gibt verschiedene Arten von Sperren in Python: Mutex-Sperre (Mutex): stellt sicher, dass jeweils nur ein Thread oder Prozess auf Ressourcen zugreifen kann. Bedingungsvariable: Ermöglicht einem Thread oder Prozess, auf eine bestimmte Bedingung zu warten und dann die Sperre zu erhalten. Lese-/Schreibsperre: Ermöglicht mehreren Threads das gleichzeitige Lesen von Ressourcen, erlaubt jedoch nur einem Thread das Schreiben von Ressourcen

See all articles