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

Einführung in die Rolle des HTML-Doctypes

Der Dokumentmodus verfügt über die folgenden zwei ...

MySQL-Indexoptimierung: Detaillierte Einführung in die Paging-Erkundung

Inhaltsverzeichnis MySQL-Indexoptimierung – Pagin...

Analyse der Implementierungsschritte für die Docker-Containerverbindung

Im Allgemeinen verwenden wir nach dem Start des C...

Detaillierte Erläuterung der Redis-Master-Slave-Replikationspraxis mit Docker

Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...

Mysql-Optimierung Zabbix-Partitionsoptimierung

Der größte Engpass bei der Verwendung von Zabbix ...

Installation von mysql-community-server.5.7.18-1.el6 unter centos 6.5

Verwenden Sie den folgenden Befehl, um zu überprü...

MySQL: MySQL-Funktionen

1. Integrierte Funktionen 1. Mathematische Funkti...

Zusammenfassung der MySQL-Nutzungsspezifikationen

1. Es muss die InnoDB-Speicher-Engine verwendet w...