从零开始的敲代码生活--Linux应用软件(线程)

发布时间:2026/11/5 13:55:43
从零开始的敲代码生活--Linux应用软件(线程) 一、线程的概念线程是轻量级的进程用于实现多任务并发。线程操作系统CPU任务调度的最小单位进程操作系统资源分配的最小单位二、线程的创建线程隶属于某一个进程由所属进程创建。线程会分配独立栈空间默认8M同进程下所有线程共享堆区、数据区、文本代码区、内核空间。三、进程与线程的区别对比项进程线程概念操作系统资源分配的最小单位CPU任务调度的最小单位效率创建开销大创建速度快切换开销小内存内存消耗大并发数量受限仅独立栈区其余资源和进程共享安全性进程空间完全独立安全性高共享地址空间安全性较差通信不能直接通信依赖IPC进程间通信可直接通过全局变量、队列通信四、线程的调度调度逻辑和进程相同宏观并行微观串行。五、线程消亡两个阶段线程退出回收线程资源空间六、线程相关函数接口1. pthread_create 创建线程int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);参数说明thread保存线程ID的变量地址attr线程属性传NULL使用默认属性start_routine线程任务函数指针函数格式void *func(void *)arg传给线程任务函数的参数返回值成功返回0失败返回非0错误码。⚠重要注意编译线程代码必须链接线程库-lpthread/-pthread主线程不要在线程执行完毕前直接结束进程否则所有线程会直接销毁。2. 线程退出的几种方式线程任务函数执行结束return整个进程退出调用pthread_exit()主动退出线程七、线程的分离属性与非分离属性分离属性 detach线程结束由操作系统自动回收其他线程不需要调用pthread_join回收。int pthread_detach(pthread_t tid);适用场景其他线程没有机会做回收操作。非分离属性默认线程结束后资源不会自动释放必须调用pthread_join回收。int pthread_join(pthread_t thread, void **retval);参数thread待回收线程IDretval接收线程返回状态不关心状态填NULL返回成功0失败非0。特性阻塞等待目标线程结束。八、线程的同步和互斥1. 线程间通信通信手段全局变量、全局队列、pthread_create传参、条件变量。临界资源多个线程都可以访问的资源例如全局变量、队列、文件。 临界区访问临界资源的那一段代码。 多线程同时访问临界资源会产生资源竞争问题。2. 互斥机制互斥锁实现多个线程排他访问临界资源。 使用步骤定义锁对象pthread_mutex_tpthread_mutex_init()初始化锁pthread_mutex_lock()加锁pthread_mutex_unlock()解锁pthread_mutex_destroy()销毁锁int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);mutex锁对象地址attr锁属性NULL使用默认属性 返回成功0失败非0。其他锁类型读写锁读共享写独占自旋锁获取不到锁时CPU空循环不放弃CPU时间片3. 同步机制信号量semaphore控制线程执行先后顺序实现同步。 步骤创建信号量对象sem_tsem_init()初始化信号量sem_wait()P操作申请信号量sem_post()V操作释放信号量sem_destroy()销毁信号量int sem_init(sem_t *sem, int pshared, unsigned int value);参数sem信号量对象地址pshared0用于线程之间非0用于进程之间value信号量初始值 返回成功0失败非0。九、死锁死锁多线程环境各个线程持有资源又互相请求对方手里的资源全部陷入永久等待。常见死锁现象忘记解锁同一个锁重复加锁多把锁线程加锁顺序混乱线程A拿锁1线程B拿锁2A请求锁2B请求锁1死锁四个必要条件全部满足才会死锁破坏任意一条即可解除互斥条件资源同一时刻只能被一个任务占用。请求与保持条件持有部分资源不释放同时申请新资源。不剥夺条件资源只能持有者主动释放别人不能强行抢夺。循环等待条件多个线程形成环路互相等待对方资源。解决死锁方法加锁解锁成对编写不要漏写解锁。所有线程加锁顺序保持一致破坏循环等待。使用非阻塞接口pthread_mutex_trylock()、sem_trywait()拿不到锁主动释放已持有的锁资源。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询