Eine kurze Diskussion über die Simulation von Multithread- und Multiprozess-Abstürzen in Linux

Eine kurze Diskussion über die Simulation von Multithread- und Multiprozess-Abstürzen in Linux

Abschluss:
Wenn in einer Multithread-Umgebung einer der Threads abstürzt, stürzen auch die anderen Threads (der gesamte Prozess) ab.
Wenn einer der Prozesse in einer Multiprozessumgebung abstürzt, hat dies keine Auswirkungen auf die verbleibenden Prozesse.

Multithreading

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

void *fun1(void *arg)
{
 printf("fun1 eingeben\n");
 während(1)
 {
  printf("%s\n", __FUNKTION__);
  wirschlafen(1000 * 1000);
 }
 printf("fun1 beenden\n");
 Rückgabewert ((void *)1);
}

void *fun2(void *arg)
{
 printf("fun1 eingeben\n");
 wir schlafen(1000 * 3000);
 char * ptr = (char *)malloc(Größe von(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 frei(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 beenden\n");
 Rückgabewert ((void *)2);
}

int Haupt(void)
{
 pthread_t tid1, tid2;
 int err;
 
 err = pthread_create(&tid1, NULL, fun1, NULL);
 behaupten(0 == err);
 err = pthread_create(&tid2, NULL, fun2, NULL);
 behaupten(0 == err);
 
 printf("Hauptverknüpfung ...\n");
// getchar();
 pthread_join(tid1, NULL);
 pthread_join(tid2, NULL);
 
 gebe 0 zurück;
}

Multi-Prozess

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

void-Spaß(void *arg)
{
 printf("fun1 eingeben\n");
 wir schlafen(1000 * 3000);
 char * ptr = (char *)malloc(Größe von(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 frei(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 beenden\n");
 zurückkehren ;
}

int main(int argc, char *argv[])
{
 behaupten(2 == argc);
 pid_t pid;
 int ich;
 für(i=0; i<atoi(argv[1]); i++)
 {
  pid = gabel();
  wenn(0 > pid)
  {
   printf("Fork-Fehler");
   Ausgang (1);
  }
  sonst wenn (0 == pid)
  {
   printf("Kind-PID ist %lu\n", (unsigned long)getpid());
   Spaß(NULL);
   Ausfahrt (0);
  }
 }
 
 printf("übergeordnete PID ist %lu\n", (unsigned long)getpid());
 while(-1 != wait(NULL)); //Warten, bis alle Unterprozesse beendet sind printf("main return\n");
 getchar();
 
 gebe 0 zurück;
}

Dies ist das Ende dieses Artikels über die Linux-Simulation von Multithread- und Multiprozess-Abstürzen. Weitere relevante Linux-Simulationen von Multithread- und Multiprozess-Abstürzen finden Sie in früheren Artikeln auf 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 von C\C++-Multiprozess- und Multithread-Programmierbeispielen unter Linux
  • Implementierung der Linux BASH-Methode zur parallelen Mehrprozessverarbeitung
  • Gemeinsame Methoden zur Implementierung von PHP-Multiprozessen unter Linux
  • Eine kurze Analyse eines einfachen Multithread-Mutex-Lock-Beispiels unter Linux
  • Multithread-Programmierung in der Sprache C unter Linux
  • Beispielcode für die Multithread-Programmierung unter Linux C
  • Detaillierte Erklärung und einfache Beispiele zum Multithreading in Linux
  • Multithread-Programmierung unter Linux (Teil 3)
  • Linux-Multithreading verwendet Mutex zum Synchronisieren von Threads
  • Methode zum Festlegen von Linux-Multithread-Sperrattributen

<<:  Der Unterschied zwischen distinct und group by in MySQL

>>:  Detaillierte Erklärung der Unterschiede zwischen var, let und const in JavaScript es6

Artikel empfehlen

Detaillierte Erklärung der Truncate-Verwendung in MySQL

Vorwort: Wenn wir eine Tabelle löschen möchten, v...

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...

Mysql 5.7.17 Winx64-Installationstutorial auf Win7

Softwareversion und Plattform: MySQL-5.7.17-winx6...

Docker Compose-Übung und Zusammenfassung

Docker Compose kann die Orchestrierung von Docker...

Hinweise zur Verwendung des Blockquote-Tags

<br />Semantisierung lässt sich nicht mit we...

MySQL-Operator-Zusammenfassung

Inhaltsverzeichnis 1. Arithmetische Operatoren 2....

So verbinden Sie Navicat mit der Docker-Datenbank auf dem Server

Starten Sie den MySQL-Container in Docekr Verwend...

Benutzerzentriertes Design

Ich wurde in letzter Zeit häufig zu einer offensi...

Möglichkeiten zur Verbesserung der MongoDB-Leistung

MongoDB ist eine Hochleistungsdatenbank, bei der ...

So ändern Sie die Gruppe, zu der ein Benutzer in Linux gehört

Ändern Sie die Gruppe, zu der ein Benutzer in Lin...

Einführung in Linux-Komprimierungs- und Dekomprimierungsbefehle

Inhaltsverzeichnis Gängige Komprimierungsformate:...

Lösung für die Inkonsistenz zwischen Crontab-Ausführungszeit und Systemzeit

Vorwort Unter LINUX werden periodische Aufgaben n...