Linux には、「pthread_create()」関数というスレッドを作成する関数があります。この関数は、Unix 系オペレーティング システムでスレッドを作成する関数です。4 つのパラメータをサポートしています: パラメータ 1 はスレッド識別子へのポインタ、パラメータ 2 はスレッド属性の設定に使用され、パラメータ 3 はスレッド実行関数の開始アドレスです、パラメータ 4 は関数を実行するためのパラメータです。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux には、pthread_create() 関数というスレッドを作成する関数があります。
pthread_create() は、Unix 系オペレーティング システム (Unix、Linux、Mac OS X など) でスレッドを作成する関数です。
ヘッダー ファイル
# include<pthread.h></pthread.h>
int pthread_create( pthread_t *restrict tidp, //新创建的线程ID指向的内存单元。 const pthread_attr_t *restrict attr, //线程属性,默认为NULL void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行 void *restrict arg //默认为NULL。上述函数需要参数,将参数放入结构中并将地址作为arg传入。 );戻り値
- ##成功した場合は 0 を返し、それ以外の場合はエラーを返します
- パラメータ
- 最初のパラメータは、スレッド識別子へのポインタです。
- 2 番目のパラメータは、スレッドのプロパティを設定するために使用されます。
- 3 番目のパラメータは、関数を実行するスレッドのアドレスです。
- 最後のパラメータは、関数を実行するためのパラメータです。
- 注意
静的リンク ライブラリを呼び出すためにコンパイルするときは、-lpthread パラメーターを追加することに注意してください。 pthread は Linux システムのデフォルトのライブラリではないためです。
関数の使用法#include <stdio.h>
#include <string.h>
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <vector>
#include "main.h"
using namespace std;
struct Sample {
uint32_t index;
char sex;
uint32_t age;
uint32_t result;
};
void* TaskEntry(void *args)
{
Sample *sa = (Sample*)args;
uint32_t num = sa->index;
if (num == 0) {
printf("TaskEntry entry num = 0\n"); // 线程1执行体
sleep(10);
printf("TaskEntry entry num = 0 is over!!!\n");
} else if (num == 1) {
printf("TaskEntry entry num = 1\n"); // 线程2执行体
sleep(10);
printf("TaskEntry entry num = 1 is over!!!\n");
} else if (num == 2) {
printf("TaskEntry entry num = 2\n"); // 线程3执行体
sleep(2);
printf("TaskEntry entry num = 2 is over!!!\n");
}
}
uint32_t CreateTask(pthread_t& pid, Sample& sample)
{
// 假设Sample.index == 2创建任务失败,直接返回
if (sample.index == 2) {
return 2;
}
pthread_attr_t attr; // 设置线程属性
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 64 * 1024); // 设置线程栈大小为64KB
uint32_t ret = pthread_create(&pid, &attr, (void*(*)(void*))TaskEntry, (void*)&sample);
if (ret != 0) {
return ret;
}
pthread_attr_destroy(&attr); // 取消线程的设置属性
return 0;
}
void VerifyTask(vector<pthread_t>& taskID, vector<Sample>& taskArgs)
{
void *ret;
for (int index = 0; index<2; index++) {
// 等待线程结束,释放相应的资源。pthread_join会堵塞主线程不会堵塞其他子线程,然后等待监控的线程执行完成,再返回主线程
// 在此处线程执行顺序为:线程1--主线程--线程2--主线程--线程3
pthread_join(taskID[index], &ret); // 堵塞主线程,执行子线程taskID[index],等待子线程taskID[index]执行完成释放资源
printf("task[%d] is over\n", index); // 主线程执行打印操作
}
}
int main(void)
{
// 创建3个线程
vector<pthread_t> taskID(3);
vector<Sample> taskArgs(3);
for (int i = 0; i < 3; i++) {
taskArgs[i] = { i, 'a', 90, 0};
uint32_t ret = CreateTask(taskID[i], taskArgs[i]);
if (ret != 0) {
// 模拟如下场景:任务创建失败,直接停止前面的任务
for (int j = 0; j<i; j++) {
pthread_cancel(taskID[j]); // 子线程1和子线程2延迟10s,当线程3创建失败时,直接让其停止。
}
//return ret; // 主线程退出,所有子线程一起退出
}
}
VerifyTask(taskID, taskArgs); // 校验线程是否结束
printf("three thead is running over!!!\n");
return 0;
}
コンパイルを使用する場合は、コンパイル オプション -lpthread を追加する必要があることに注意してください。例: g -lpthread main.cpp -o main
関連する推奨事項: 「
Linux ビデオ チュートリアル#」
以上がLinuxにはスレッドを作成する機能はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Linuxは、UNIXベースのマルチユーザーのマルチタスクオペレーティングシステムで、シンプルさ、モジュール性、オープン性を強調しています。そのコア機能には、ファイルシステム:ツリー構造で整理され、Ext4、XFS、BTRFSなどの複数のファイルシステムをサポートし、DF-Tを使用してファイルシステムタイプを表示します。プロセス管理:PSコマンドを使用してプロセスを表示し、優先度の設定と信号処理を含むPIDを使用してプロセスを管理します。ネットワーク構成:IPアドレスの柔軟な設定とネットワークサービスの管理、およびsudoipaddraddを使用してIPを構成します。これらの機能は、基本的なコマンドと高度なスクリプト自動化を通じて実際の操作に適用され、効率を向上させ、エラーを削減します。

Linuxメンテナンスモードに入る方法には次のものがあります。1。grub構成ファイルを編集し、「シングル」または「1」パラメーターを追加し、Grub構成を更新します。 2。GRUBメニューでスタートアップパラメーターを編集し、「シングル」または「1」を追加します。終了メンテナンスモードでは、システムを再起動する必要があります。これらの手順を使用すると、必要に応じてメンテナンスモードをすばやく入力して安全に終了し、システムの安定性とセキュリティを確保できます。

Linuxのコアコンポーネントには、カーネル、シェル、ファイルシステム、プロセス管理、メモリ管理が含まれます。 1)カーネル管理システムリソース、2)シェルはユーザーインタラクションインターフェイスを提供します。3)ファイルシステムは複数の形式をサポートします。4)プロセス管理は、フォークなどのシステムコールを通じて実装され、5)メモリ管理は仮想メモリテクノロジーを使用します。

Linuxシステムのコアコンポーネントには、カーネル、ファイルシステム、ユーザースペースが含まれます。 1.カーネルはハードウェアリソースを管理し、基本的なサービスを提供します。 2。ファイルシステムは、データストレージと組織を担当します。 3.ユーザースペースでユーザープログラムとサービスを実行します。

メンテナンスモードは、シングルユーザーモードまたはレスキューモードを介してLinuxシステムに入力される特別な動作レベルであり、システムのメンテナンスと修理に使用されます。 1.メンテナンスモードを入力し、コマンド「sudosystemctlisolaterscue.target」を使用します。 2。メンテナンスモードでは、ファイルシステムを確認して修復し、コマンド「FSCK/DEV/SDA1」を使用できます。 3.高度な使用法には、ルートユーザーパスワードのリセット、ファイルシステムの読み取りモードと書き込みモードのマウント、パスワードファイルの編集が含まれます。

メンテナンスモードは、システムのメンテナンスと修理に使用され、管理者が簡素化された環境で作業できるようにします。 1。システム修理:破損したファイルシステムとブートローダーを修理します。 2。パスワードリセット:ルートユーザーパスワードをリセットします。 3。パッケージ管理:ソフトウェアパッケージをインストール、更新、または削除します。 GRUB構成を変更するか、特定のキーを使用してメンテナンスモードを入力することにより、メンテナンスタスクを実行した後、安全に終了できます。

Linuxネットワークの構成は、次の手順で完了できます。1。ネットワークインターフェイスを構成し、IPコマンドを使用して、構成ファイルの永続性設定を一時的に設定または編集します。 2。固定IPを必要とするデバイスに適した静的IPを設定します。 3.ファイアウォールを管理し、iPtablesまたはFirewalldツールを使用してネットワークトラフィックを制御します。

メンテナンスモードは、Linuxシステム管理において重要な役割を果たし、修復、アップグレード、構成の変更を支援します。 1.メンテナンスモードを入力します。 Grubメニューから選択するか、コマンド「sudosystemctlisolaterscue.target」を使用できます。 2。メンテナンスモードでは、ファイルシステムの修理およびシステムの更新操作を実行できます。 3.高度な使用法には、ルートパスワードのリセットなどのタスクが含まれます。 4.メンテナンスモードに入ったり、ファイルシステムをマウントできないなどの一般的なエラーは、GRUB構成をチェックしてFSCKコマンドを使用して固定できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









