Arten von Fäden
Der spezielle Serienstrom eines Prozesses wird als Thread bezeichnet. Themen werden als unmenschliche Verfahren bezeichnet, da sie in vielerlei Hinsicht den Prozessen ähnlich sind. Obwohl Threads nacheinander betrieben werden, scheinen sie gleichzeitig gleichzeitig ausgeführt zu werden. Für jeden Thread gibt es verschiedene Zustände.
Im Wesentlichen sind Prozesse die Programme, die aus dem Ready State entsandt und für die Ausführung in der CPU geplant sind. Das Prozesskonzept wird von PCB (Process Control Block) gehalten. Ein Prozess kann so produzieren, was als „Kinderprozesse“ oder neue Prozesse bezeichnet wird. Der Vorgang dauert länger, da er isoliert ist, was bedeutet, dass er keinen Speicher mit anderen Prozessen freigibt. Jeder der folgenden Zustände für den Prozess könnte vorhanden sein: neu, bereit, laufend, warten, gekündigt oder suspendiert.
Themen
Ein Thread ist ein Modul eines Prozesses. Ein Prozess kann mehrere Threads haben und alle diese Threads sind innerhalb der Methode enthalten. Drei Zustände existieren für einen Thread: Laufen, Bereit und blockiert. Der Faden endet schneller als der Prozess, isoliert jedoch nicht wie der Prozess.
Die gemeinsamen Eigenschaften zwischen Fäden und Prozessen umfassen
Die Unterscheidungen zwischen Prozessen und Faden
Thread auf Benutzerebene
Es wird in der Bibliothek auf Benutzerebene in die Praxis umgesetzt. Systemaufrufe werden nicht verwendet, um sie zu konstruieren. Das Thread -Switing erfordert keinen Betriebssystemaufruf oder einen Kernel -Interrupt. Der Kernel verwaltet sie so, als wären sie mit Single-Threaden-Prozessen, da er sich des Threads auf Benutzerebene nicht bewusst ist.
Vorteile
Ein Thread auf Kernelebene
Die Themen werden vom Kernel verwaltet. Darüber hinaus verfolgt der Kernel auch die Prozesse mithilfe der herkömmlichen Prozess Tabelle. Der OS -Kernel verfügt über Systemaufrufe zum Verwalten und Erstellen von Threads.
Vorteile
Ein anderer Name für einen Thread ist ein leichter Prozess. Durch die Aufschlüsselung eines Prozesses in mehrere Fäden soll die Parallelität erreicht werden. Zum Beispiel könnten viele Registerkarten in einem Browser verschiedene Threads darstellen. Mehrere Threads werden von MS Word verwendet, einschließlich eines für die Verarbeitung von Eingaben und eine für die Formatierung des Textes.
Ein Klassen -Thread bezieht sich auf einen bestimmten Implementierungsfaden. In C ++ bezieht sich der Begriff „Thread -Klasse“ auf die STD :: Thread -Klasse. Sobald das verknüpfte Threads-Objekt erstellt wurde, ist die oberste Methode, die als Teil der Funktionskonstruktorvereinbarung bereitgestellt wurde. Der implementierende Code, der aufgerufen werden muss.
Wie bereits erwähnt, ist STD :: Thread erforderlich, um einen neuen Thread zu starten, und der Thread muss auch aufrufbar sein. Ein Anruf ist ein Programm, das ausgeführt werden muss, wenn der Thread aktiv ist. Mit anderen Worten, wenn ein neuer Thread erforderlich ist, muss ein Anrufabstand als Argument an den Konstruktor eines Objekts für Std :: Thread geliefert werden. Danach beginnt der neu erzeugte Thread und die aufrufbare Funktion wird ausgeführt.
Die Hauptunterscheidung ist, dass Prozesse, die in verschiedenen Speicherbereichen ausgeführt werden, Fäden in einem einzelnen prozess gemeinsam genutzten Speicherplatz. Da Themen nicht vollständig unabhängig voneinander sind wie Prozesse, teilen sie ihre OS -Ressourcen, den Abschnitt und den Datenabschnitt mit anderen Threads.
Fadenfunktion in c++
In einem Betriebssystem bieten sie (POSIX -Thread) für Funktionen, diese Funktionen im Zusammenhang mit Funktionen. Wir können viele Threads auf diese Weise machen, um den gleichzeitigen Prozessfluss zu unterstützen. Es funktioniert am besten auf Systemen mit mehreren Prozessoren oder Kernen, bei denen die Ausführungsgeschwindigkeit erreicht werden kann, indem Threads auf Kernelebene implementiert werden. Gewinne können auch in Systemen mit einem einzigen Prozessor erzielt werden.
Erstellen () Funktionen
pthread_create: neuer Thread erstellen
Parameter
Exit () Funktion
pthread_exit: Wird verwendet, um die Verwendung eines Threads zu stoppen
Parameter
Enthüllen Sie, ein Zeiger auf eine Ganzzahl, die den Rückgabestatus des Threads enthält. Jeder Thread, der darauf wartet, diesen Thread zu verbinden.
Join () Funktion
pthread_join: Wird verwendet, um das Warten des Fadens zu verlassen
Parameter
Equal () Funktion
pthread_equal: Bestimmt, ob zwei Threads ähnlich sind oder nicht. Die Funktion gibt eine Zahl ungleich Null zurück, wenn die beiden Threads gleich sind, sonst Null.
St :: Fadenerstellung
In C ++ werden Threads mit der STD :: Thread -Klasse erstellt. Ein Thread ist ein einzigartiger Ausführungsfluss; Es ist ähnlich wie eine Helfer, die eine Aufgabe erledigt, während Sie eine andere gleichzeitig beenden. Sobald der gesamte Code des Threads ausgeführt wurde, stoppt er. Bei der Einrichtung eines Threads muss etwas übergeben werden, um darauf ausgeführt zu werden. Die unten aufgeführten Objekte können an einen Thread übergeben werden.
Mitgliedstypen
ID: Thread ID (öffentlich)
Native_handle_type: native_handle_type (public)
Der Thread ermöglicht die gleichzeitige Ausführung mehrerer Aufgaben. In C ++ bezieht sich der Begriff „Thread -Klasse“ auf die STD :: Thread -Klasse. Ein neues Thread -Objekt muss generiert werden, um einen Thread zu starten, und es muss an den ausführenden Code geliefert werden, der aufgerufen werden muss. Die obere Methode, die als Teil der Funktionskonstruktorvereinbarung geliefert wurde.
Callable verwenden Objekt
Ein Objekt könnte durch die Verwendung dieser Methode abgerufen werden. Dazu ist eine Klasse erforderlich und Operator () muss innerhalb dieser Klasse überladen sein. Die Software, die ausgeführt wird, wenn der Thread gebildet wird, ist in den überlasteten Methoden enthalten.
Nutzbar mit Zeiger
Ein Zeiger wird mit dieser Methode abrufbar gemacht. Im Thread -Objekt wird die an die Methode gesendete Liste der Parameter oder Argumente neben dem Namen der Funktion angezeigt.
Mit Funktionszeiger aufgerufen
Das Geben des Thread -Objekts zur Ausführung erzielt das gewünschte Ergebnis. Der Funktionskonstruktor des Thread -Objekts empfängt einen Lambda -Ausdruck mit dem Namen „LM“ als erstes Argument, bevor er seine Argumente als zweites Argument erhält.
Lassen Sie uns verschiedene Beispiele für STD :: Thread -Funktionen diskutieren.
Beispiel 1
In diesem Fall werden wir einen Thread mit einem Zeiger verwenden.
#enthalten
#enthalten
Klassentest
öffentlich:
void execute (STD :: String -Befehl)
für (int i = 0; i < 8; i++)
std :: Cout<
;
int main ()
Test * testPtr = neuer Test ();
std :: thread th (& test :: execute, testPtr, "Werte");
th.verbinden();
Testptr löschen;
Rückkehr 0;
Zunächst geben wir die Headers -Dateien und in das Programm ein. Wir erstellen die Klasse und geben ihren Namen "Test" an. Dann verwenden wir die öffentliche Methode und führen den String -Befehl aus. Nach Ausführung des String -Befehls bewerben wir uns für Schleife und Inkrement (0 bis 8). Hier verwenden wir die Cout -Erklärung. Als nächstes nennen wir die main () -Funktion. Zusammen mit diesem nennen wir die Klasse "Test" und verwenden einen Zeiger darin. Als nächstes passt der Thread den Zeiger über. Anschließend haben wir die Funktion join () verwendet, den Testzeiger löschen und 'return 0' eingeben.
Beispiel 2
In diesem Fall werden wir einen Thread ohne Zeiger verwenden.
#enthalten
#enthalten
Klassenname
öffentlich:
Statischer Hohlraumtest (STD :: String -Befehl)
für (int i = 0; i < 3; i++)
std :: Cout<
;
int main ()
std :: thread th (& name :: test, "name");
th.verbinden();
Rückkehr 0;
Verwenden Sie Header -Dateien und . Erstellen Sie eine Klasse und der Titel der Klasse lautet "Name". Wir verwenden die öffentliche Methode und die nächste Zeile verwendet eine statische Mitgliedsfunktion und hier übergeben die Zeichenfolge. Verwenden Sie die "für" Schleife und initialisieren Sie die Werte von 0 bis 3. Die Anweisung "Cout" wird verwendet, um den Wert darzustellen. In der nächsten Zeile rufen wir die Funktion main () auf, verwenden Thread und übergeben die Werte, ohne einen Zeiger zu verwenden. Als nächstes verwenden wir die Funktion join () und geben 'return 0' ein.
Beispiel 3
Hier werden wir den Leeroperator anwenden.
#enthalten
#enthalten
Verwenden von Namespace STD;
Klassenlabor
öffentlich:
void operator () (int a)
für (int i = 0; i < a; i++)
Cout << "Number of threads :" << i << "\n";
;
int main ()
Thread T2 (Lab (), 6);
t2.verbinden();
Rückkehr 0;
In diesem Code integrieren wir die erforderlichen Header -Dateien , . Wir verwenden den Standard -Namespace als STD. Wir fügen eine Klasse namens "Lab" hinzu und verwenden seine öffentliche Methode. Verwenden Sie dann den Hohlraumoperator und initialisieren Sie eine Variable 'a' darin. Hier werden wir die 'für' Schleife von 0 zum Wert der Variablen 'a' verwenden. Darüber hinaus werden wir eine Anweisung „Anzahl der Threads“ mit der Anweisung "Cout" ausdrucken. Wir berufen die Main () -Funktion. In diesem Fall wird ein Thread mit dem Wert 6 deklariert. Wenn ein Thread einen Anruf erhält, wird ein Code ausgeführt und die Nachricht auf dem Bildschirm angezeigt.
Abschluss
In diesem Handbuch haben wir über den Thread in C ++ - Funktionen gesprochen. Dann beobachten wir verschiedene Funktionen von Thread in C++. Wir haben den Thread und auch seine Typen definiert. Außerdem haben wir verschiedene Parameter des Threads erwähnt. Wir haben zahlreiche Arten von Codes ausgeführt. Im ersten Code haben wir einen Thread mit einem Zeiger verwendet. Es handelt sich um eine nicht statische Mitgliedsfunktion. Zweitens, in Code verwenden wir Thread ohne Zeiger, es handelt sich um eine statische Mitgliedsfunktion. Dritter und letzter Code haben wir den Hohlraumoperator verwendet und als ein Thread den Wert erhielt, zeigte er die Nachricht auf dem Bildschirm.