C ++ Mutex Lock

C ++ Mutex Lock

Es ist bekannt. Diese Programmiersprache unterstützt auch die gleichzeitige Ausführung mehrerer Threads mit dem Austausch mehrerer Ressourcen zwischen ihnen. Beim Multithreading soll der Thread nur die Lesevorrichtung ausführen, die keine Probleme macht, da der Thread nicht von dem betroffen ist, was die anderen Threads zu diesem Zeitpunkt tun. Wenn diese Threads jedoch die Ressourcen zwischen ihnen teilen mussten, kann ein Thread die Daten zu diesem Zeitpunkt ändern, was das Problem darstellt. Um dieses Problem zu lösen, haben wir das C ++ - Mutex ", das den Zugriff mehrerer Ressourcen auf unseren Code/Objekt verhindert, indem wir die Synchronisation bereitstellen, die besagt, dass der Zugriff auf das Objekt/Code nur einen Thread gleichzeitig bereitgestellt werden kann. Damit mehrere Threads nicht gleichzeitig auf dieses Objekt zugreifen könnten.

Verfahren:

Wir werden erfahren, wie wir den Zugriff mehrerer Threads zu einem Objekt zu einem einzigen Zeitpunkt mit Mutex Lock stoppen können. Wir werden über die Syntax des Mutex -Sperre, das, was mehrere Threading ist und wie wir mit den durch Multiple Threading verursachten Problemen mithilfe der Mutex -Sperre umgehen können, sprechen. Dann werden wir ein Beispiel für das mehrfache Threading nehmen und die Mutex -Sperre für sie implementieren.

Syntax:

Wenn wir erfahren möchten, wie wir die Mutex -Sperre implementieren können, damit wir den Zugriff mehrerer Threads gleichzeitig auf unser Objekt oder Code verhindern können, können wir die folgende Syntax verwenden:

$ std :: mutex mut_x
$ mut_x. sperren ();
Void func_name ()
$ // Code, den wir aus den mehreren Threads verstecken möchten, würden hier geschrieben werden
$ mut_x. entsperren ();

Wir werden diese Syntax jetzt für das Dummy -Beispiel und im Pseudo -Code (den wir nicht einfach wie im Code -Editor ausführen) verwenden, um Ihnen mitzuteilen, wie wir diese Syntax genau verwenden können, wie dies im Folgenden erwähnt wird:

$ std :: mutex mut_x
Void block ()
$ mut_x. sperren ();
$ std :: Cout << “hello”;
$ mut_x. entsperren ();

Beispiel:

Versuchen wir in diesem Beispiel zuerst den Multithread -Betrieb und umgeben diesen Vorgang dann mit Mutex -Sperre und entsperren. Mutex befasst sich mit Rassenbedingungen, die die Werte sind, die ziemlich unvorhersehbar sind und von der Umstellung der Threads abhängig sind, die zeitbewusst sind. Um das Beispiel für Mutex zu implementieren, müssen wir zunächst die wichtigen und erforderlichen Bibliotheken aus den Repositorys importieren. Die erforderlichen Bibliotheken sind:

$ # inklusive
$ # inklusive
$ # inklusive

Die "iOstream" -Bibliothek bietet uns eine Funktion, um die Daten als Cout anzuzeigen, die Daten als CIN zu lesen und die Anweisung als Endl zu beenden. Wir verwenden die "Thread" -Bibliothek, um die Programme oder Funktionen aus den Threads zu verwenden. Die "Mutex" -Bibliothek ermöglicht es uns, sowohl die Mutex -Sperre zu implementieren als auch den Code freizuschalten. Wir verwenden das „# include“, da dies alle Programme im Zusammenhang mit der im Code enthaltenen Bibliothek ermöglicht.

Nach Abschluss des vorherigen Schritt. Dann erstellen wir eine Funktion für Mutex Lock und entsperren, die wir danach im Code aufrufen konnten. In diesem Beispiel nennen wir diese Funktion als Block. Im Körper der Blockfunktion nennen wir zuerst den „Mutex.lock () ”und beginnen.

Der Mutex.lock () verweigert den Zugriff auf die anderen Threads, um unser erstelltes Objekt oder Code zu erreichen, damit nur ein Thread unser Objekt gleichzeitig lesen kann. In der Logik führen wir eine für die Schleife aus, die auf dem Index von 0 bis 9 ausgeführt wird. Wir zeigen die Werte in der Schleife an. Sobald diese Logik nach Abschluss ihrer Operation oder nach dem Verlassen der Logik in der Mutex -Sperre erstellt wurde, nennen wir den „Mutex.entsperren () ”Methode. Mit diesem Methode -Aufruf können wir das erstellte Objekt aus der Mutex -Sperre entsperren, da der Zugriff des Objekts auf einen einzelnen Thread früher bereitgestellt wurde und sobald die Operation dieses Objekts gleichzeitig von einem Thread ausgeführt wurde. Wir möchten jetzt, dass die anderen Threads auch auf dieses Objekt oder Code zugreifen. Andernfalls bewegt sich unser Code in der Situation „Deadlock“, die dazu führt. Daher führt ein unvollständiger Betrieb weiter aus. Danach beenden wir die Blockfunktion und bewegen uns zum Haupt.

In der Hauptstufe zeigen wir einfach unseren erstellten Mutex an, indem wir die drei Threads mit dem "std :: thread thread_name erstellen (auf die bereits erstellte blockfunktion hier aufrufen. Auf diese Weise werden die drei Threads erstellt. Anschließend schließen wir uns diesen drei Threads an, die gleichzeitig ausgeführt werden können, indem wir den "Thread_Name" aufrufen. join () ”Methode. Und dann geben wir den Wert gleich Null zurück. Die zuvor erwähnte Erklärung des Beispiels wird in Form des Codes implementiert, der in der folgenden Abbildung angezeigt werden kann:

In der Ausgabe des Codes können wir die Ausführung und Anzeige aller drei Threads nacheinander sehen. Wir können auch sehen, wenn unsere Bewerbung unter die Kategorie des Multithreading fällt. Trotzdem hat keiner der Threads die Daten überschrieben oder geändert und die modifizierte Ressource aufgrund der Implementierung des Mutex des "Funktionsblocks" geteilt, die modifizierte Ressource geteilt hat.

Abschluss

Dieser Leitfaden enthält eine detaillierte Erklärung des Konzepts der in C verwendeten Mutex -Funktion++. Wir haben diskutiert, was die Multithreading -Anwendungen sind, auf welche Probleme wir in Multithreading -Anwendungen begegnen und warum wir den Mutex für Multithreading -Anwendungen implementieren müssen. Wir haben dann die Syntax für den Mutex mit dem Dummy-Beispiel unter Verwendung des Pseudo-Code besprochen. Anschließend haben wir ein vollständiges Beispiel für die Multithreading -Anwendungen mit dem Mutex im C ++ - Visual Studio implementiert.