我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux创建线程的函数是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux创建线程的函数是什么

这篇文章主要介绍“linux创建线程的函数是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux创建线程的函数是什么”文章能帮助大家解决问题。

linux有创建线程的函数,即“pthread_create()”函数。该函数是类Unix操作系统中创建线程的函数,支持四个参数:参数1是指向线程标识符的指针、参数2用来设置线程属性、参数3是线程运行函数的起始地址、参数4是运行函数的参数。

本教程操作环境:linux5.9.8系统、Dell G3电脑。

linux创建线程的函数是pthread_create()函数

pthread_create()是类Unix操作系统(Unix、Linux、Mac OS X等)中创建线程的函数

头文件

  #include<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,否则返回出错编号

参数

  • 第一个参数为指向线程标识符的指针。

  • 第二个参数用来设置线程属性。

  • 第三个参数是线程运行函数的地址。

  • 最后一个参数是运行函数的参数。

注意

  在编译时注意加上-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创建线程的函数是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux创建线程的函数是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux创建线程的函数是什么

这篇文章主要介绍“linux创建线程的函数是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux创建线程的函数是什么”文章能帮助大家解决问题。linux有创建线程的函数,即“pthread_
2023-06-29

linux线程的创建方法是什么

在Linux系统中,可以使用pthread库来创建线程。pthread库是一个POSIX线程库,提供了一系列函数来创建、管理和同步线程。使用pthread库创建线程的方法如下:1. 包含头文件:首先需要包含pthread.h头文件。```c
2023-08-30

Linux线程的创建方式是什么

这篇文章主要介绍“Linux线程的创建方式是什么”,在日常操作中,相信很多人在Linux线程的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux线程的创建方式是什么”的疑惑有所帮助!接下来
2023-07-05

创建函数/类的线程

# 创建类的线程import threadingimport timeclass MyThread(threading.Thread): def run(self): for i in range(3):
2023-01-30

JavaEE的进程,线程是什么和怎么创建线程

本篇内容介绍了“JavaEE的进程,线程是什么和怎么创建线程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、认识进程、线程 1.1什么是进
2023-06-29

java创建多线程的方法是什么

在Java中,有两种常见的方法来创建多线程:1. 继承Thread类:创建一个继承自Thread类的子类,重写run()方法,并在run()方法中定义线程要执行的任务。然后创建子类的实例,调用start()方法来启动线程。例如:```jav
2023-08-16

Java中线程的创建方式是什么

本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建
2023-07-05

c++创建多线程的方法是什么

在C++中,有多种方法可以创建多线程。以下是其中几种常见的方法:使用std::thread类:std::thread类是C++标准库中用于创建和管理线程的类。通过创建std::thread对象并传入要执行的函数、函数参数等信息来创建线程。#
2023-10-25

java线程池创建的方法是什么

在Java中,线程池可以使用以下两种方法来创建:使用`Executors`类中的静态方法来创建线程池:ExecutorService executor = Executors.newFixedThreadPool(10);上面的代码将创
2023-10-25

Linux多线程怎么创建

在Linux中,可以使用pthread库来创建多线程。下面是一个简单的例子:```c#include #include // 线程函数void *thread_func(void *arg) {int thread_num = *((int
2023-08-16

C#线程的作用是什么及怎么创建

本篇内容主要讲解“C#线程的作用是什么及怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#线程的作用是什么及怎么创建”吧!线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一
2023-06-30

Linux系统怎么创建线程

这期内容当中小编将会给大家带来有关Linux系统怎么创建线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSIX线程(pthread)的情
2023-06-28

Linux创建虚拟机的流程是什么

1、安装虚拟化软件常见的虚拟化软件包括 VirtualBox、VMware 等。在 Linux 操作系统上安装虚拟化软件。2、创建虚拟机在虚拟化软件中,创建新的虚拟机实例。需要指定虚拟机的名称、操作系统类型、内存大小、磁盘空间大小等参数。3
2023-05-13

Java多线程是什么及如何创建

本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!1、线程池:什么是线程池?咱们也不看长篇大论,通俗的来讲,线程池
2023-06-29

Linux之线程的创建方式

目录线程的概念与实现方式线程的实现方式linux系统实现多线程的方式线程和进程的区别多线程开发的三个基本概念线程库的使用线程库中的其他方法线程属性线程属性初始化线程分离总结线程的概念与实现方式 线程是进程内部的一条执行序列或执行路径,一个进
2023-03-23

Python线程的创建与常用方法是什么

这篇文章主要介绍“Python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么
2023-06-30

编程热搜

目录