Einführung in Fork in Multithreading unter Linux

Einführung in Fork in Multithreading unter Linux

Frage:

Bedenken Sie: Wenn ein Programm nur einen Hauptthread hat und fork aufgerufen wird, hat der von fork erstellte untergeordnete Prozess auch nur einen Thread.

Was wäre, wenn wir Fork in ein Multithread-Programm einfügen würden?

Probieren wir es aus:

Fall (1) Fork vor dem Erstellen eines Child-Threads

Code:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void*pthread_fun(void*arg)
{
	printf("Spaß = %d\n", getpid());
	pthread_exit(NULL);
}
int main()
{
	Gabel();

	pthread_t-ID;
	pthread_create(&id, NULL, pthread_fun, NULL);
	
	printf("main_pid = %d\n", getpid());
	pthread_join(id, NULL);

	gebe 0 zurück;
}

Ergebnis: Der gegabelte Kindprozess wird auch seinen eigenen Kindthread erstellen (兩個進程:四個線程)

Bildbeschreibung hier einfügen

Fall (2) Fork nach dem Erstellen eines Child-Threads

Code:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void*pthread_fun(void*arg)
{
	printf("Spaß = %d\n", getpid());
	pthread_exit(NULL);
}
int main()
{

	pthread_t-ID;
	pthread_create(&id, NULL, pthread_fun, NULL);
	Gabel();
	
	printf("main_pid = %d\n", getpid());
	pthread_join(id, NULL);
	gebe 0 zurück;
}

Ergebnis: Nach dem Erstellen eines untergeordneten Threads wird ein untergeordneter Prozess erstellt. Zu diesem Zeitpunkt führt der untergeordnete Fork-Prozess nur den Code nach dem Fork aus (兩個進程:三個線程).

Bildbeschreibung hier einfügen

Fall (3) Fork im untergeordneten Thread

Code:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void*pthread_fun(void*arg)
{
	Gabel();
	printf("Spaß = %d\n", getpid());
	pthread_exit(NULL);
}
int main()
{

	pthread_t-ID;
	pthread_create(&id, NULL, pthread_fun, NULL);
	
	printf("main_pid = %d\n", getpid());
	pthread_join(id, NULL);

	gebe 0 zurück;
}

Ergebnis:

Bildbeschreibung hier einfügen

abschließend:

In welchem ​​Thread handelt es sich um eine Fork? Der nach der Fork erstellte untergeordnete Prozess verwendet diesen Thread als Hauptthread und führt den Code nach diesem Thread aus.

Dies ist das Ende dieses Artikels über Forks in Multithreading unter Linux. Weitere relevante Inhalte zu Forks in Linux Multithreading finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Python-Garbage-Collection-Mechanismus
  • Tutorial zum Prinzip des Speicherbereinigungsmechanismus für die Python-Sprachentwicklung
  • Analyse des Prinzips des Python-Garbage-Collection-Mechanismus
  • Wie wird die Garbage Collection in Python implementiert?
  • Beispiel für einen Fork- und Mutex-Lock-Prozess im Linux-Multithreading
  • Python Garbage Collection und Linux Fork

<<:  Was sind Inline-Elemente und Blockelemente?

>>:  Detaillierte Erklärung der allgemeinen Verwendung von Pseudoklassen vor und nach in CSS3

Artikel empfehlen

Spezifische Verwendung von Lazy Loading und Preloading in js

Verzögertes Laden (Lazy Loading) und Vorladen sin...

JavaScript-Farbbetrachter

In diesem Artikelbeispiel wird der spezifische Ja...

CocosCreator Erste Schritte Tutorial: Netzwerkkommunikation

Übersicht zur Netzwerkkommunikation Bei der Entwi...

Flex-Layout realisiert linken Textüberlauf und lässt rechte Textanpassung aus

Ich möchte eine Situation erreichen, in der die B...

js realisiert das dynamische Laden von Daten durch Wasserfallfluss

In diesem Artikel erfahren Sie den spezifischen C...

Grundlegende Verwendung von benutzerdefinierten Anweisungen in Vue

Inhaltsverzeichnis Vorwort Text 1. Globale Regist...

Zusammenfassung einiger praktischer kleiner Zaubertricks in der Vue-Praxis

Wie können Sie das Lamaging von Routen vergessen,...

Mehrere Möglichkeiten, Bilder in React-Projekte einzuführen

Der img-Tag führt das Bild ein Da React die Seite...

js realisiert die Funktion zum Klicken zum Wechseln der Karte

In diesem Artikelbeispiel wird der spezifische Co...

3 verschiedene Möglichkeiten zum Löschen der Optionsoptionen im Auswahltag

Methode 1 Code kopieren Der Code lautet wie folgt:...

Ein kurzer Vergleich von Props in React

Inhaltsverzeichnis Props-Vergleich von Klassenkom...

MySQL-Join-Abfragesyntax und Beispiele

Verbindungsabfrage: Es ist das Ergebnis der paarw...

mysql5.7-Remotezugriffseinstellungen

Das Einrichten des Fernzugriffs in mysql5.7 funkt...