返回顶部
首页 > 资讯 > 操作系统 >linux创建线程的函数是什么
  • 888
分享到

linux创建线程的函数是什么

2023-06-29 16:06:33 888人浏览 独家记忆
摘要

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

这篇文章主要介绍“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创建线程的函数是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网操作系统频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: linux创建线程的函数是什么

本文链接: https://lsjlt.com/news/325718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • linux创建线程的函数是什么
    这篇文章主要介绍“linux创建线程的函数是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux创建线程的函数是什么”文章能帮助大家解决问题。linux有创建线程的函数,即“pthread_...
    99+
    2023-06-29
  • linux线程的创建方法是什么
    在Linux系统中,可以使用pthread库来创建线程。pthread库是一个POSIX线程库,提供了一系列函数来创建、管理和同步线...
    99+
    2023-08-30
    linux
  • Linux线程的创建方式是什么
    这篇文章主要介绍“Linux线程的创建方式是什么”,在日常操作中,相信很多人在Linux线程的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux线程的创建方式是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • 创建函数/类的线程
    # 创建类的线程 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3)...
    99+
    2023-01-30
    线程 函数
  • JavaEE的进程,线程是什么和怎么创建线程
    本篇内容介绍了“JavaEE的进程,线程是什么和怎么创建线程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、认识进程、线程 1....
    99+
    2023-06-29
  • php创建数组的函数是什么
    php创建数组的函数有很多,其中常见的有以下几种:array函数array函数是最基本的创建数组的函数,它的语法如下:array( [mixed $value,] [mixed $... ] )其中,value是数组元素的值,...表示可以...
    99+
    2023-05-23
  • java线程池创建的方法是什么
    在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
    99+
    2023-10-25
    java
  • c++创建多线程的方法是什么
    在C++中,有多种方法可以创建多线程。以下是其中几种常见的方法: 使用std::thread类:std::thread类是C++标...
    99+
    2023-10-25
    c++
  • java创建多线程的方法是什么
    在Java中,有两种常见的方法来创建多线程:1. 继承Thread类:创建一个继承自Thread类的子类,重写run()方法,并在r...
    99+
    2023-08-16
    java
  • Java中线程的创建方式是什么
    本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建...
    99+
    2023-07-05
  • Linux多线程怎么创建
    在Linux中,可以使用pthread库来创建多线程。下面是一个简单的例子:```c#include #include // 线程函...
    99+
    2023-08-16
    Linux
  • Linux进程创建的方法是什么
    Linux进程的创建可以通过调用fork()系统调用来实现。fork()系统调用会创建一个与父进程几乎完全相同的子进程,包括代码段、...
    99+
    2024-04-02
  • PostgreSQL创建函数中的选项是什么
    这篇文章主要介绍“PostgreSQL创建函数中的选项是什么”,在日常操作中,相信很多人在PostgreSQL创建函数中的选项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • ​linux中怎么创建多线程
    这篇文章主要介绍了linux中怎么创建多线程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux中怎么创建多线程文章都会有所收获,下面我们一起来看看吧。linux线程分为两...
    99+
    2024-04-02
  • Linux系统怎么创建线程
    这期内容当中小编将会给大家带来有关Linux系统怎么创建线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSIX线程(pthread)的情...
    99+
    2023-06-28
  • C#线程的作用是什么及怎么创建
    本篇内容主要讲解“C#线程的作用是什么及怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#线程的作用是什么及怎么创建”吧!线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一...
    99+
    2023-06-30
  • Linux创建虚拟机的流程是什么
    1、安装虚拟化软件常见的虚拟化软件包括 VirtualBox、VMware 等。在 Linux 操作系统上安装虚拟化软件。2、创建虚...
    99+
    2023-05-13
    Linux创建虚拟机 Linux
  • Java多线程是什么及如何创建
    本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!1、线程池:什么是线程池?咱们也不看长篇大论,通俗的来讲,线程池...
    99+
    2023-06-29
  • Linux之线程的创建方式
    目录线程的概念与实现方式线程的实现方式linux系统实现多线程的方式线程和进程的区别多线程开发的三个基本概念线程库的使用线程库中的其他方法线程属性线程属性初始化线程分离总结线程的概念与实现方式 线程是进程内部的一条执行序...
    99+
    2023-03-23
    Linux线程的创建 Linux线程 Linux创建线程
  • Python线程的创建与常用方法是什么
    这篇文章主要介绍“Python线程的创建与常用方法是什么”,在日常操作中,相信很多人在Python线程的创建与常用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程的创建与常用方法是什么...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作