当前位置: 首页 > news >正文

线程基本概念

一、进程的结束

wait(阻塞)     一般不做额外的事情

wait(非阻塞)   逻辑不受影响(必须套在循环中)

wait作用:1.获取子进程退出状态  2.回收资源

传参为指针:被调修改主调

获取退出状态值:

WIFEXITED    判断是否为正常退出

WEXITSTATUS  获取到exit传递的退出状态值

WIFSIGNALED   异常退出

WTERMISIG    接收致使异常退出的信号编号 

waitpid:pid_t    waitpid(pid_t   pid,int *wstatus,int  options)

参数:pid =-1表示等待所有子进程状态改变

           pid > 0 等待指定的子进程状态改变

         wstatus   表示获取到的子进程的状态信息

           options 分为阻塞(0) 与不阻塞(WNOHANG)  默认阻塞

         阻塞会影响父进程处理逻辑         非阻塞必须套在循环中处理

二、线程

1.线程:轻量级的进程           进程:重量级

    线程是CPU执行的最小单位             进程是资源分配的基本单位

   线程创建和调度的时空开销都比进程小

组成:线程tid    程序计数器   寄存器集合   栈区

2.线程存在于进程中          线程共享进程的资源        

   线程结束不一定导致进程结束        但进程结束会导致线程结束

3.线程的编程: 类似于进程过程   NPTL        创建----执行-----退出-----资源回收

4.pthread_create: 创建一个指定线程

int   pthread_create(pthreat_t *thread,const pthread_attr_t   *attr,void *(*start _routine)(void *),void * arg)

参数: thread   线程tid,需要实现定义并由函数返回

attr:线程属性,一般为NULL,表示默认属性(可结合性+分离属性)

        默认为可结合性     自己手动回收

             分离属性         系统自动回收

start_routine   线程执行函数(线程回调函数)  (完成线程任务功能的函数,需要调用自己实现)

  指向指针函数的函数指针,为一个函数的名称即可

arg   回调函数的参数

返回值:成功返回0         失败返回错误码

编译时需要添加  -lpthread

主函数所在执行流为主线程        其他的线程为子线程(次线程)

各个线程间地位是平等的     

pthread_self():获得当前线程的tid

pthread_exit:   结束调用的线程    pthread_exit(void *retval);  

      参数:  retval     退出的状态值

pthread_exit  本身表示线程结束      若为main函数表示主线程结束    

主线程结束不代表进程结束        

此时  主线程执行流结束   进程会在其余线程结束后结束

pthread_join: int  pthread_join(pthread_t  thread,void **retval);

参数:  thread   线程tid

             retval   用来保存退出状态值所在空间的地址

成功返回0     失败返回错误码

http://www.lryc.cn/news/425898.html

相关文章:

  • 在SpringBoot中执行后台任务
  • 【网络】UDP回显服务器和客户端的构造,以及连接流程
  • 【智能流体力学】ANSYS Fluent工作流程设置、求解和后处理详解
  • 最新UI六零导航系统源码 | 多模版全开源
  • K8S中使用英伟达GPU —— 筑梦之路
  • 2024-2025年最值得选的Java计算机毕业设计选题大全:800个热门选题
  • libnl教程(2):发送请求
  • 【软件测试】功能测试理论基础
  • 玩机进阶教程-----回读 备份 导出分区来制作线刷包 回读分区的写入与否 修改xml脚本
  • MongoDB 插入文档
  • 【内网】服务器升级nginx1.17.0
  • 歌曲爬虫下载
  • transformer-explainer
  • C#中的S7协议
  • 2024-08-16升级记录:使用Android RecyclerView控件显示列表型信息
  • 通义千问 ( 一 ) 基础实例
  • docker 修改数据目录
  • r4s软路由写入iStoreOS镜像
  • [C++][opencv]基于opencv实现photoshop算法灰度化图像
  • Emacs23.x版本之重要特性及用法实例(一百五十六)
  • 机器学习 第11章-特征选择与稀疏学习
  • Grok 2携AI图片生成重生
  • 使用Nexus搭建Maven私服仓库
  • 云计算day27
  • 关于HTTP HEAD介绍
  • WPF Mvvm
  • pnpm【实用教程】2024最新版
  • C#的前沿技术有哪些?
  • Vue2移动端(H5项目)项目基于vant封装图片上传组件(支持批量上传、单个上传、回显、删除、预览、最大上传数等功能)---解决批量上传问题
  • ELK整合实战,filebeat和logstash采集SpringBoot项目日志发送至ES