线程基本概念

devtools/2024/9/22 9:13:38/

一、进程的结束

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.ppmy.cn/devtools/95333.html

相关文章

基于NXP IMX6Q+FPGA全自动血液分析仪解决方案

全自动血细胞分析仪 ,临床又称血常规检测仪、血液分析仪、血球分析仪、血液细胞分析仪、血球计数仪,是指对一定体积全血内血细胞异质性进行自动分析的临床检验常规仪器。 NXP IMX6Q核心板采用四核Cortex-A9架构,主频1GHz,12层PCB…

6数字基石:掌握计算机语言、多媒体与系统工程

计算机语言 计算机语言是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成,而这一种指令一般包括表达式、流程控制和集合三大部分内容。 表达式又包含变量、常量、字面量和运算符。 流程控制有分支…

Linux---05---用户组权限

课程回顾 vim编辑器 本章重点 文件权限 用户管理 用户组管理 一、文件权限 由于Linux是一个多人多任务的系统,因此经常会出现同一台机器同时有多个人进行操作,为了考虑每个人的隐私权以及每个人喜好的工作环境,所以文件的权限归属就至关…

P2680 [NOIP2015 提高组] 运输计划(树上二分答案)

[NOIP2015 提高组] 运输计划 - 洛谷 核心思路 树上二分答案。答案这个字眼很重要&#xff0c;因为&#xff0c;二分出来的就是答案。 拟合经验。 AC 代码 #include<iostream> #include<vector> #include<cstring> #include<algorithm> #include&l…

C++多态详解

1. 多态的概念 多态就是函数调用的多种形态&#xff0c;使用多态能够使得不同的对象去完成同一件事时&#xff0c;产生不同的动作和结果。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学生买票时&#xff0c;是半价买…

创建第一个Qt项目

创建第一个QT项目 创建工程名称一般不要有特殊符号&#xff0c;不要有中文 项目工程保存路径可修改&#xff0c;路径不要带中文 Base class中的三个选项 QMainWindow:主窗口类&#xff0c;包括菜单栏、工具栏、状态栏。 QWidget:可以创建一个空白的窗口&#xff0c;是所有界…

河南萌新联赛2024第(五)场:信息工程大学

A 日历游戏 题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们先从 2000.1.1 到 2024.8.1 这个日期之间&#xff08;不包括2024.8.1&#xff09;随意抽取一个日期出来。然后他们轮流对这个日期进行操作&#xff1a; 把日期的天数加 1&#xff0c;例如&#xff1a;2000.1.1…

得到任务式 大模型应用开发学习方案

根据您提供的文档内容以及您制定的大模型应用开发学习方案&#xff0c;我们可以进一步细化任务式学习的计划方案。以下是具体的任务式学习方案&#xff1a; 任务设计 初级任务 大模型概述&#xff1a;阅读相关资料&#xff0c;总结大模型的概念、发展历程和应用领域。深度学…