Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

結論:
マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) もクラッシュします。
マルチプロセス環境でプロセスの 1 つがクラッシュしても、残りのプロセスには影響はありません。

マルチスレッド

#include <stdio.h>
#include <文字列.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

void *fun1(void *arg)
{
 printf("fun1 enter\n");
 ながら(1)
 {
  printf("%s\n", __FUNCTION__);
  スリープ(1000 * 1000);
 }
 printf("fun1 exit\n");
 戻り値 ((void *)1);
}

void *fun2(void *arg)
{
 printf("fun1 enter\n");
 スリープ(1000 * 3000);
 char * ptr = (char *)malloc(sizeof(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 解放(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 exit\n");
 戻り値 ((void *)2);
}

int メイン(void)
{
 pthread_t tid1、tid2;
 整数エラー;
 
 エラー = pthread_create(&tid1, NULL, fun1, NULL);
 アサート(0 == エラー);
 エラー = pthread_create(&tid2, NULL, fun2, NULL);
 アサート(0 == エラー);
 
 printf("メイン結合...\n");
// getchar();
 pthread_join(tid1, NULL);
 pthread_join(tid2, NULL);
 
 0を返します。
}

マルチプロセス

#include <stdio.h>
#include <文字列.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

void fun(void *arg)
{
 printf("fun1 enter\n");
 スリープ(1000 * 3000);
 char * ptr = (char *)malloc(sizeof(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 解放(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 exit\n");
 戻る ;
}

int main(int argc, char *argv[])
{
 アサート(2 == argc);
 pid_t pid;
 整数 i;
 i=0; i<atoi(argv[1]); i++)の場合
 {
  pid = fork();
  0 より大きい場合
  {
   printf("フォークエラー");
   終了(1);
  }
  そうでない場合(0 == pid)
  {
   printf("子のPIDは%luです\n", (unsigned long)getpid());
   楽しい(NULL);
   終了(0);
  }
 }
 
 printf("親PIDは%lu\n", (unsigned long)getpid());
 while(-1 != wait(NULL)); //すべてのサブプロセスが終了するまで待機します printf("main return\n");
 getchar();
 
 0を返します。
}

マルチスレッド クラッシュとマルチプロセス クラッシュの Linux シミュレーションに関するこの記事はこれで終わりです。マルチスレッド クラッシュとマルチプロセス クラッシュの Linux シミュレーションに関するより関連性の高い記事については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux での C\C++ マルチプロセスおよびマルチスレッド プログラミング例の詳細な説明
  • Linux BASHマルチプロセス並列処理方式の実装
  • Linux で PHP マルチプロセスを実装する方法の共有
  • Linux でのシンプルなマルチスレッド ミューテックス ロックの例の簡単な分析
  • Linux での C 言語によるマルチスレッド プログラミング
  • Linux C マルチスレッドプログラミングのサンプルコード
  • Linux のマルチスレッドの詳細な説明と簡単な例
  • Linux でのマルチスレッド プログラミング (パート 3)
  • Linuxのマルチスレッドはミューテックスを使用してスレッドを同期します
  • Linux マルチスレッド ロック属性設定方法

<<:  MySQL における distinct と group by の違い

>>:  JavaScript es6 における var、let、const の違いの詳細な説明

推薦する

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...

Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)

静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...

フォーム入力ボックスに関するWebデザインのヒント

1. キャンセル ボタンが押されたときの破線ボックス<br /> 入力に属性値 hide...

Vueはプログレスバーの変更効果を実現します

この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...

MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明

1. はじめに外部キー制約を使用するかどうかという話題は、すでに決まり文句になっています。学校では、...

div画像マーキーシームレス接続実装コード

コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...

vxe-table を使用して vue で編集可能なテーブルを作成するプロセス

プロジェクトには、オンラインで編集する必要があるテーブルがあります。最初は、要素の el-table...

Node.js+express+socket でオンラインのリアルタイム多人数チャットルームを実現

この記事では、オンラインリアルタイム多人数チャットルームを実現するためのNode.js+expres...

MySQL 5.7.20 zip インストール チュートリアル

MySQL 5.7.20 zipインストール、具体的な内容は次のとおりです(1)圧縮パッケージを解凍...

RHCEはApacheをインストールし、ブラウザでIPにアクセスします

1. at は、5 時間後にルート ディレクトリの at_test ファイルに「これは at タスク...

一般的なテーブルコンポーネントの Vue カプセル化の完全な手順記録

目次序文テーブル コンポーネントをカプセル化する必要があるのはなぜですか?ステップ1: 共通コンポー...

フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS

目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...

CentOS8でyumソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...

MySQLはinet_atonとinet_ntoaを使用してIPアドレスデータを処理します。

この記事では、適切な形式を使用して IP アドレス データをデータベースに保存し、IP アドレスを簡...

CSS3 引用のソースと出典をマークする方法

疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...