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

系统编程—线程

概念

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

工作原理

线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤销线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

阻塞(Block):如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。

适用范围

  1. 服务器中的文件管理或通信控制
  2. 前后台处理
  3. 异步处理

特征

  1. 进程是系统中最小的资源分配单位
  2. 线程是系统中最小的执行单位
  3. 进程中,线程与线程是平级关系
  4. 在进程中,默认有一个线程,那个是主线程

与进程的区别

  1. 线程可以资源共享,进程资源对立。线程有各自的栈区,这个区域独立。
  2. 稳定行,进程相对稳定,线程不稳定(如果进程中多线程,其中一个崩溃,整个进程崩溃);
  3. 创建的开销,线程创建需要在进程空间中,开辟一个新的栈区(8MB) .新建一个进程的话,需要创建3GB空间。
  4. 并发度,线程的并发高于进程的并发度。

线程编程步骤POSIX

创建多线程->线程空间操作->线程资源回收(线程退出后,默认栈区不释放)

线程有两个基本类型

用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。

系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤销线程。

线程的状态变化

(1)创建线程
当创建一个新的进程时,也创建一个新的线程,进程中的线程可以在同一进程中创建新的线程。

(2)终止线程

可以正常终止自己,也可能某个线程执行错误,由其它线程强行终止。终止线程操作主要负责释放线程占有的寄存器和栈

(3)阻塞线程

当线程等待每个事件无法运行时,停止其运行。

(4)唤醒线程

当阻塞线程的事件发生时,将被阻塞的线程状态置为就绪态,将其挂到就绪队列。进程仍然具有与执行相关的状态。例如,所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。对进程施加的与进程状态有关的操作,也对其线程起作用。例如,把某个进程挂起时,该进程中的所有线程也都被挂起,激活也是同样。

线程相关函数

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
功能:该函数可以创建指定的一个线程。
参数:
  1. thread线程id,需要实现定义并由该函数返回。
  2. attr线程属性,一般是NULL,表示默认属性。
  3. start_routine指向指针函数的函数指针。本质上是一个函数的名称即可。称为th回调函数,是线程的执行空间。
  4. arg回调函数的参数,即参数3的指针函数参数。
返回值:
  1. 成功0
  2. 失败 错误码
获得id
pthread_t pthread_self(void); unsigned long int; %lu
功能:获取当前线程的线程id
参数:无
返回值:
  1. 成功 返回当前线程的线程id
  2. 失败 非0值;
线程退出函数
void pthread_exit(void *retval); exit return p;
功能:子线程自行退出
参数:retval线程退出时候的返回状态,临死遗言。
返回值:无
结束线程
int pthread_cancel(pthread_t thread);
功能:请求结束一个线程
参数:thread请求结束一个线程tid
返回值:
  1. 成功0
  2. 失败 非0值;
线程空间的回收--》》阻塞方式
int pthread_join(pthread_t thread, void **retval);
功能:通过该函数可以将指定的线程资源回收,该函数具有阻塞等待功能,如果指定的线程没有结束,则回收线程会阻塞。
参数:
  1. thread要回收的子线程tid
  2. retval要回收的子线程返回值/状态。==ptread_exit();
返回值:
  1. 成功0
  2. 失败 非0值;
分离属性,给某个线程设置的属性,如果线程设置了这个属性,那么,线程在退出后,相关资源(栈区)会被系统回收,原来创建者,就不能回收了。
目的线程消亡,自动回收空间。
int pthread_deatch(pthread_t thread);
功能,设置分离属性
参数,线程id号,填自己的id
返回值:
  1. 成功0
  2. 失败 非0值;
http://www.cnnetsun.cn/news/96525.html

相关文章:

  • 9 个 MBA 论文降AI工具,AI 写作优化推荐
  • 10 个高效降AI率工具,自考党必备!
  • 测试技术如何应用于股市个股的风险评测?
  • Java毕设选题推荐:基于java的畅销图书推荐系统基于springboot+vue的畅销图书推荐系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机Java毕设实战-基于JavaWeb的智慧养老院管理系统的设计与实现访客记录、病历档案、入院指南、药品信息【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于JavaWeb的心聘求职平台的设计与实现基于springboot的人才求职招聘平台设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • LobeChat会议议程自动生成器开发
  • Python面向对象——进阶(三)
  • C语言实现图书管理系统[2025-12-17]
  • LobeChat对话摘要自动生成实践
  • 迈向价值透明:基于意义行为原生论的机器学习治理框架——一份人机协作的独立宣言
  • 企业级AI客服新选择:基于LobeChat镜像的智能对话系统搭建
  • LobeChat会员等级权益设计建议
  • LobeChat版本更新日志解读:v0.8.5新增特性一览
  • LobeChat RBAC权限模型设计
  • LobeChat董事会汇报PPT内容生成
  • 8个AI写作工具,专科生轻松搞定论文格式规范!
  • 使用 Python 动手实践全局优化方法
  • 如图,红框是新版QQ,右边是旧版QQ
  • LobeChat差分隐私保护机制设计
  • 《gdb 与 cgdb 深度解析:命令行调试的效率革命》
  • 国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
  • 脚本网页 地球演化
  • AXI-A7.4.9 Atomic transaction dependencies
  • 【AI黑科技】6.89%性能炸裂!ASFR框架让知识图谱“开天眼“,小白程序员也能玩转大模型增强技术
  • Google最新AI Agents课程全解析!337页白皮书浓缩精华,从入门到精通,手把手教你成为Agent开发大神!
  • 介观交通流仿真软件:Aimsun Next_(10).动态交通分配
  • C语言学习第四天
  • 通信工程毕设易上手课题指导
  • 单链表逆转