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设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

手机远程linux工具有:1、JuiceSSH,是一款功能强大的安卓SSH客户端应用,可直接对linux服务进行管理;2、Termius,可以利用手机来连接Linux服务器;3、Termux,一个强大的远程终端工具;4、向日葵远程控制等等。

linux中,lsb是linux标准基础的意思,是“Linux Standards Base”的缩写,是linux标准化领域中的标准;lsb制定了应用程序与运行环境之间的二进制接口,保证了linux发行版与linux应用程序之间的良好结合。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 中国語版
中国語版、とても使いやすい

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック



