首页 > 编程语言 >系统编程——线程

系统编程——线程

时间:2024-10-31 19:50:50浏览次数:7  
标签:函数 thread void 编程 系统 线程 pthread include

        线程(thread),系统编程中很为重要的一种编程方法。

1.概念

        主流的操作系统中都是支持多进程,而每个进程中又可以启动多个线程来完成任务,以实现代码并行的操作。

        线程是系统调度资源的最小单位,属于轻量级的代码并行,不需要消耗额外的内存空间,一个进程内的线程共享所在进程的内存空间。

        线程的资源消耗也远远小于进程,线程之间相互独立,也相互影响,可以提高代码执行的效率。

2.线程函数于进程函数之间的比较

        进程:                                             线程:

        创建:fork()/vfork()                          pthread_create()

        退出:exit()/_exit()/_Exit()             pthread_exit();

        回收:wait()/waitpid()                       pthread_join();

        结束:kill()/sigqueue()                      pthread_cancel();

        由于linux系统中没有支持线程的系统调用,所以在linux中需要借助到第三方库pthread库,并且在编译时得链接pthread库。(-pthread)

3.线程使用步骤

(1)创建线程(pthread_create)

#include<pthread.h>

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,
                    void *(*start_routine)(void *),void *arg);
//参数:
    thread:传出参数,传出创建线程的id
    attr:线程属性,一般用NULL表示默认属性
    start_routine:线程函数,启动线程后回去执行该函数(属于并行方式)
    arg:传递给线程函数的参数

(2)获取线程id(pthread_self)

#include<pthread.h>
pthread_t pthread_self(void);
//返回线程id

(3)线程结束(pthread_exit)

#include<pthread.h>
void pthread_exit(void *retval);
//除了在线程函数中用return结束也可以用该函数来结束
//参数为线程的返回值

参考代码:

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
//线程函数
void *task(void *arg)
{
    printf("task thread id=%lu\n",pthread_self());
    for(int i=0;i<30;i++)
    {
        printf("i=%d\n",i);
        sleep(1);
    }
    pthread_exit(NULL);//退出线程

};
int main()
{
    //1.创建id
    pthread_t id;
    //2.创建线程
    pthread_create(&id,NULL,task,NULL);
    printf("线程创建成功,id=%lu\n",id);
    for(int i=50;i>30;i--){
        printf("main:i=%d\n",i);
        sleep(1);
    }
    return 0;
}
//main函数中属于主线程,当main函数退出时,其它线程即使没完成也会被退出

(4)等待线程结束,回收资源(pthread——join)

#include<pthread.h>
int pthread_join(pthread_t thread,void **retval);
//参数:
    thread:要等待的线程id
    retval:传出参数,传出线程的返回值

        当然这些属于是线程较为常用,也最为熟悉简单的函数,它还有其他很多函数。对于我目前的学习情况用上以上函数便已足够,如需更加深入学习,到时再进行学习。

标签:函数,thread,void,编程,系统,线程,pthread,include
From: https://blog.csdn.net/2303_76896902/article/details/143341987

相关文章

  • (开题报告)django+vue高校OA系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校OA系统的研究,现有研究主要集中在传统开发技术或单一功能模块的优化上。在国内外,虽然OA系统已广泛应用于企业等领域,但专门针对......
  • SERVLET程序设计2554停车场计费系统设计与实现源码
    项目包含:源码、论文、讲解视频、说明文档请查看博主个人简介运行环境:推荐jdk1.8开发工具:Eclipse、MyEclipe以及idea(推荐)操作系统:windows108G内存以上(其他windows)浏览器:GoogleChrome(推荐)、Edge、360浏览器;数据库:MySQL5.7;数据库可视化工具:NavicatPremium推荐)以......
  • SpringBoot社区疫情防控系统的设计与实现66u82程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表居民,确诊人员,外来人员报备,健康上报,商品分类,防疫物品开题报告内容一、研究背景随着全球疫情的持续影响,社区疫情防控已成为保障居民健康安全的重要防线。传......
  • SpringBoot社区疫情防控系统k37xk--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,志愿活动,活动报名,体温上报,行程上报,健康码上报,来访报备,异常上报开题报告内容一、研究背景新冠疫情的肆虐给全球公共卫生体系带来了巨大挑战,社区作为......
  • 多租户系统的应用架构
    大家好,我是汤师爷~我们看下多租户系统的应用架构是如何从一层层构建起来的。1、应用层设计应用层的主要作用是为具体的用户场景提供应用服务,帮助用户在特定场景下完成操作。通过编排领域层的各项能力,实现SaaS产品的核心功能。应用层包含两个关键模块:租户运营平台模块:这个模......
  • 第九周:对象式编程
    第九周:对象式编程1.万物皆对象对象是一种相对独立的存在,类是描述某一类对象的统称,对象是类的实例类由属性和方法来描述,对应变量和函数类={属性}+{方法}如果类是<C>,其派生的对象是<O>,属性是<A>,方法是<B>,那么访问方法结构如下:属性访问:<O>.<A>方法访问:<O>.<B>()......
  • 【YOLO目标检测实战 】1.Windows安装WSL2和Linux子系统
    1下载安装显卡驱动下载地址:https://www.nvidia.cn/geforce/drivers/根据显卡型号,下载显卡驱动根据默认选项,安装显卡驱动查看显卡驱动是否安装成功右键开启菜单->命令提示符(管理员)在命令行中输入nvidia-smi.exe命令,查看显卡驱动是否安装成功。2下载安装MobaXte......
  • # 20222316 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    一、实验内容1.学习总结1)免杀基本概念英文为Anti-AntiVirus(简写VirusAV),逐字翻译为“反-反病毒”,翻译为“反杀毒技术”。一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。2)免杀技术修改特征码修改校验和花指令免杀花指令其实......
  • python+flask计算机毕业设计共享汽车租赁系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于共享汽车租赁系统的研究,现有研究多侧重于传统汽车租赁业务的数字化转型,主要以提升租车流程的效率和便捷性为主。专门针对共享汽车......
  • (开题报告)django+vuejavaweb学生宿舍管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于学生宿舍管理系统的研究,现有研究多集中于传统管理模式或单一功能模块的实现。在国内外,传统的学生宿舍管理方式主要依赖人工操作,效......