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

Linux:线程管理(线程创建、线程退出、线程回收、线程分离、其它线程函数)

线程管理

(1)What(什么是线程管理)

对程序中线程的创建、调度、同步、退出、回收等操作进行有效的控制和协调

(2)Why(为什么要管理线程)

充分利用系统资源,提高程序的并发的性能和稳定性。但如果管理不当,可能会导致死锁、资源泄漏等问题

(3)Which(管理线程有哪些工作)

线程创建、线程调度、线程退出、线程回收、线程退出等操作,详细介绍如下列所述

A.创建

在一个进程中调用线程创建函数,可以得到一子线程,必须给每一个创建出的线程指定一个处理函数、否则线程就无法工作

#include  <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*threadFun)(void *),void *arg);		
  • 参数thread:用于返回新创建线程的标识符
  • 参数attr:指定线程的属性,如线程的堆栈大小、优先级等。如果为 NULL,则使用默认属性
  • 参数threadFun:函数指针,指向新线程将执行的函数
  • 参数arg:传递给新线程执行函数的参数
  • 返回值:0表示创建成功,非0表示创建失败

B.退出

指的是由于线程执行完毕而终止,或者由于某些原因提前终止。线程可以在任意位置调用 pthread_exit 来主动终止自己的执行

void pthread_exit(void *retval);

参数retval:指定线程退出时返回的值。这个值可以被其他线程通过 pthread_join 函数获取

C.回收

当一个线程创建了其他线程并希望获取这些子线程的结束信息、释放相关资源或者进行一些后续处理时,就需要进行线程回收

int pthread_join(pthread_t thread, void **retVal);
  • 参数thread:将被回收的线程标识符
  • 参数retval:用于接收被等待线程通过 pthread_exit 传递的返回值
  • 返回值:0表示回收成功;EDEADLK:检测到死锁。EDEADLK:检测到死锁。ESRCH:找不到指定的线程。

D.分离

将线程的执行和回收分开,当一线程被标记为“分离”时,那么它执行完毕后将自动释放它所占用的系统资源,而无需父线程调用pthread_join()等待它接受并回收资源

int pthread_detach(pthread_t thread);
  • 参数thread:将要被设置为分离状态的线程标识符(在主线程中调用该函数)
  • 返回值:返回值为0表示设置成功;否则表示设置失败

说明:线程分离后,主线程可以执行自己的业务逻辑而不会因为调用pthread_join函数而阻塞

E.其它线程相关的函数

线程取消函数:

在一个线程中杀死另外一个线程

int pthread_cancel(pthread_t thread);
  • 参数thread:将要被取消的线程标识符
  • 返回值:0表示成功取消;非0表示取消失败

说明:该函数只有在thread线程进行系统调用的时候,才会被真正的“取消”,有一种“含笑半步颠”的意味在里边

线程ID比较函数:

比较两个线程,通过 pthread_equal 可以确定两个标识符是否指向同一个线程

int pthread_equal(pthread_t t1, pthread_t t2);

参数t1和t2:被比较的两个线程标识符
返回值:返回值为0表示不相等;非0正数表示相等

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

相关文章:

  • 【JVM】常见面试题
  • 0805作业+梳理
  • Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)
  • 字符串中的第一个唯一字符
  • leetcode数论(​3044. 出现频率最高的质数)
  • 70.加载功能菜单功能设计
  • 在线Banner设计工具大比拼:谁更胜一筹
  • C++ STL copy, move 用法
  • MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!
  • Android开发之事件分发
  • PyTorch深度学习实战(2)——PyTorch快速入门
  • ServletConfig、ServletContext超详细讲解
  • 【文献阅读】GraphAny: A Foundation Model for Node Classification on Any Graph
  • 动态规划.
  • PHP常用函数
  • 完全用python 实现消息中间件4
  • 公司新来的两个Java后端,因题背太熟轻松过面试?
  • Pinia状态管理库
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 【Java 第四篇章】流程控制、容器
  • 华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用
  • 除自身以外数组的相乘 C++
  • Element UI 如何配置文件来设置全局的语言选项。
  • Windows 常用命令集锦
  • 第一阶段面试问题(后半部分)
  • 【AIGC】ComfyUI入门-使用ComfyUI_MagicClothing插件在生成图片时候出现的问题
  • 巴黎奥运会8K转播科技为国产品牌自主研发设计
  • 【Material-UI】Button 组件中的图标和标签按钮(Buttons with Icons and Label)详解
  • K个一组翻转链表(LeetCode)
  • 2-56 基于matlab的图像融合增强技术