C pthread_mutex_lock Funktionsverbrauch

C pthread_mutex_lock Funktionsverbrauch
Wie der Name vorschlägt, muss die Funktion „pThread_mutex_lock“ verwendet werden, um etwas zu sperren. Die POSIX -Bibliothek von C entwickelte diese Funktion, um einen bestimmten Thread zu sperren, der als gemeinsame Ressource für eine andere Funktion in einem Programm verwendet werden kann. Es ist notwendig, Deadlock während der Ausführung zu vermeiden, wenn zwei oder mehr Funktionen denselben Thread wie ihre Ressource für die Ausführung von Ausführung verwenden. Daher werden wir die Verwendung der Funktion „pThread_mutex_lock“ der C -POSIX -Bibliothek in der Ubuntu 20 diskutieren.04 System.

Beispiel 01:

Beginnen wir mit dem ersten Beispiel, um die Funktion mutex_lock () von POSIX in C -Code anzuzeigen. Wir haben mit der Dateierstellung mit Ubuntus "Touch" -Anweisung in seiner Shell begonnen. Diese neu generierte Datei finden Sie in Ihrem Linux Home -Ordner. Um den Code in dieser Datei hinzuzufügen, müssen Sie ihn in einem Ubuntu -Editor i öffnen. I.e., Text, Nano oder Vim. Wir verwenden den Nano -Editor hier für unsere Codeerstellung. Beide Befehle sind im Bild aufgeführt.

Wir beginnen unseren C -Code mit einigen C -Headern. Diese Header-Pakete enthalten die Verwendung von Standardeingänge für Code, Standardbibliotheken, String-Header und POSIX-Thread-Bibliothek. Wir haben ein POSIX -Thread -Objekt „Th“ von Größe 3 i initialisiert.e. Es wird nur 3 Threads mit IDs erstellt.

Danach werden die Variablen vom Typ Ganzzahl i deklariert i.e., "Ich" und zähle ". Die Variable "I" wird auf 0 initialisiert. Hier kommt die Variable pThread_mutex_t, um das "Sperren" für einen Thread zu deklarieren. Obwohl die Ausführung mit der main () -Methode beginnt, müssen wir uns zuerst die Thread -Funktion ansehen. Diese Funktion wird als kritischer Abschnitt unseres Codes aufgrund der Funktion „mutex_lock“ bezeichnet. Zu Beginn der Thread -Funktion verwendet die Funktion pThread_mutex_lock die Sperrvariable, um den jeweiligen Thread mit der von der main () -Funktion PThread_Create () -Methode übergebenen „ID“ zu sperren.

Jetzt kann kein anderer Thread diesen Thread verwenden, bis dieser Thread freigeschaltet ist. Es wird also weiter verarbeiten. Die lange Typvariable "I" wird für die Verwendung in der "für" -Schloop auf 0 initialisiert. Die Variable „Count“ wurde durch 1 erhöht. Die Zählvariable wird in der Druckanweisung verwendet, um uns mitzuteilen, dass der „Thread1“ jetzt gestartet wird. Für die „Schleife“ wird hier initialisiert, um der Ausführung des Threads einen Moment der Pause zu geben. Danach lässt uns in der Druckerklärung wissen, dass Thread 1 beendet wird.

Die Funktion pThread_mutex_unlock () wird im Gegensatz zur Funktion pThread_mutex_lock () verwendet, um die Threadnummer 1 zu entsperren. Die Kontrolle geht an die Main () -Methode. Die Funktion main () erstellt weiterhin die Fadenfunktion, bis die Anzahl 3 erreicht ist 3. Hier kommt die main () -Methode nach 3 Threads Erstellung, Sperren, Entsperren und Ausgang.

Die Funktion main () wird mit einer Ganzzahlvariablen „err“ initialisiert. Die Anweisung "If" wird hier verwendet, um zu überprüfen, ob die Initialisierung des Mutex -Threads "L" mit der Funktion "pthread_mutex_init ()" von POSIXs fehlgeschlagen ist. Wenn die Initialisierung fehlschlägt, wird die jeweilige Nachricht der Druckanweisung ausgedruckt. Die "während" -Schloop ist hier, um den Zustand zu sehen, den ich is sehen kann.e. "Ich" weniger als 3. Es wird bestätigen, dass der Wert von „I“ weniger als 3 beträgt und daher weiterhin einen Thread erstellen. Jeder Thread wird gesperrt, wenn er aufgerufen wird und bis dahin kein anderer Faden erstellt werden kann.

Wenn wir einen Fehler im Thread erhalten haben, zeigen wir diesen Fehler in der Shell an, indem wir ihn mit der Methode "Strerror" in die Zeichenfolge konvertieren. Die Funktion pThread_join () wird verwendet, um alle Ressourcen zurückzunehmen, die den Threads gegeben wurden. Letzter wird die Funktion „pthread_mutex_destroy ()“ verwendet, um das Schlossobjekt zu zerstören. Unser Programm endet hier.

Die Datei wurde zusammengestellt, und wir haben keine Fehler. Bei der Ausführung startete und erstellte die Funktion main () einen Thread 1.

Nach einer Weile vervollständigte Thread 1 aufgrund eines Schlosses seine Ausführung und beendete. Danach erstellte die Main () -Funktion Thread 2 und wurde gestartet.

Nachdem Thread 2 vollständig ausgeführt wurde, wurde das Schloss beendet und die Funktion main () erstellte einen letzten Thread I.e., 3Rd Gewinde.

Nachdem der dritte Thread vollständig ausgeführt wurde, wird das Schloss freigegeben und die Steuerung wird an die Hauptmethode zurückgegeben.

Beispiel 02:

Lassen Sie uns ein weiteres Beispiel haben, um die Funktionsweise der Funktion „pThread_mutex_lock ()“ von POSIXs zu sehen. Der Code wurde mit denselben Header -Dateien gestartet.

Nach den Header -Dateien haben wir eine Mutex -Sperrfunktion erstellt. Es kommt drei Funktionen. Zwei Thread -Funktionen und 1 ist die verknüpfte Funktion. Thread1 und Thread2 nehmen Eingaben von der Main () -Funktion I.e. Fadenobjekte Th1 und Th2. Beide Thread -Funktionen rufen die Show (show () -Methode auf und übergeben zwei Zeichenfolgen in ihrem Parameter. Wenn die Funktion „Show“ beginnt, sperrt sie sich mit der Verwendung der Funktion „pthread_mutex_lock () unter Verwendung des MUTEX -Sperrenobjekts ab. Die erste Druckanweisung nimmt das erste Argument an und zeigt es an. Dann schläft es 1 Sekunde und der zweite Argumentwert wird über die Druckklausel angezeigt. In der letzten Zeile wurde das Schloss mit der Funktion „pThread_mutex_unlock ()“ unter Verwendung des Sperrobjekts veröffentlicht.

Die main () -Funktion wird mit der Erstellung von zwei Objekten für Threads i gestartet.e. Th1 und Th2. Zwei Threads wurden von der Funktion „pThread_create“ erstellt, indem Th1 und Th2 in die Parameter übergeben werden. Die "während" -Schloop ist es gewohnt, nur eine Sekunde zu laufen und nicht zu beenden. Das Programm verarbeitet sich also weiterhin selbst.

Der Code wurde zuerst mit Hilfe des GCC -Compilers in Ubuntu 20 zusammengestellt.04.

Wenn der Code ausgeführt wurde. Das Programm hielt nicht auf, nachdem die Threads ausgeführt wurden. Also müssen wir die Ausführung mit der Verknüpfung von „Strg+z“ beenden.

Um zu verhindern, dass Ihr System eine Non-Stop-Verarbeitung abhält. Die Rendite 0 -Phrase wurde durch die Schleife "while" ersetzt.

Jetzt ist dieses Programm bereit, kompiliert und ausgeführt zu werden. Also haben wir dieses Programm mit einem GCC -Compiler zusammengestellt. Danach hat die Ausführung stattgefunden. Sie können sehen, dass das Programm nach der Ausführung von zwei Themen selbst beendet wird. Der Thread1 funktioniert und die Funktion show () sperrte sich während der Ausführung selbst gesperrt. Nach der Ausführung hat es sich selbst freigegeben und Thread2 wurde ausgeführt. Die Funktion „Show“ wird darin aufgerufen und einige Parameter übergeben. Die Funktion „show ()“ sperrte sich selbst und veröffentlicht erst dann, wenn die Ausführung durchgeführt wurde und die Funktion mutex_lock nicht aufgerufen wird. Danach wird die Steuerung an die Main () -Methode zurückgegeben und das Programm endet.

Abschluss

Hier ging es um das, was wir tun können, damit Sie die Verwendung der Funktion pThread_mutex_lock im C -Code verstehen können. Wir hatten zwei extrem unterschiedliche Programme ausprobiert, um es für Sie verständlich zu machen, und haben beide Beispiele ziemlich kurz und einfach erklärt. Wir sind ziemlich optimistisch, dass dieser Artikel für jeden C -Benutzer großartig sein wird.