news 2026/3/27 18:51:54

系统编程—线程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系统编程—线程

概念

线程(英语: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值;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/19 12:33:01

LobeChat能否实现AI婚礼策划?场地布置与流程安排助手

LobeChat 能否成为你的 AI 婚礼策划师?一场技术与浪漫的碰撞 在婚礼策划公司的小会议室里,一对新人正对着厚厚一叠方案册皱眉:“我们想要森系户外风,但又怕下雨;预算有限,可不想被套路消费。”类似场景每天…

作者头像 李华
网站建设 2026/3/21 11:00:22

Realm端口转发教程

Realm 是Rust语言开发的流量转发工具,Realm 比 Gost占用资源更小。 支持多组服务器转发,同时也支持tcp和udp,还有域名解析便捷。 1、下载最新的可执行文件到本地: Github 以最新版本为主,根据自己的系统版本下载即可&…

作者头像 李华
网站建设 2026/3/22 8:20:42

【LLM基础教程】LLM训练数据集是如何构造的:从文档到Token Block

本文不讨论模型结构,而只回答一个看似简单、但极其关键的问题: 大语言模型(LLM)训练时,究竟在“吃”什么样的数据?这些数据是如何被构造出来的? ​ 在之前的文章中(【LLM基础教程】从…

作者头像 李华
网站建设 2026/3/23 5:47:53

CosyVoice3 - 跨语言、会方言、懂情绪的智能配音工具 文本转语音 语音克隆 支持50系显卡 一键整合包下载

CosyVoice 3 是阿里巴巴团队推出的一款新一代语音合成模型,它能在没有额外训练的情况下,用多种语言和方言生成自然、富有情感的语音,声音效果接近真人。它的特点是多语言支持、情感表达、方言覆盖和高质量的声音一致性,应用领域包…

作者头像 李华
网站建设 2026/3/13 0:31:05

LobeChat与知识库系统联动:构建智能问答闭环

LobeChat与知识库系统联动:构建智能问答闭环 在企业服务日益智能化的今天,一个常见的痛点浮现出来:员工每天要花大量时间重复回答“报销标准是什么”“合同模板在哪里”这类问题。客服团队面对客户提问时,也常常因为产品更新频繁而…

作者头像 李华
网站建设 2026/3/27 15:39:51

LobeChat新品发布新闻稿撰写

LobeChat新品发布技术深度解析 在AI助手逐渐渗透到日常办公与开发流程的今天,一个核心矛盾日益凸显:用户既想要ChatGPT级别的流畅交互体验,又不愿牺牲对数据和模型的控制权。商业闭源产品虽体验出色,但私有部署难、定制成本高&…

作者头像 李华