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正数表示相等
相关文章:
Linux:线程管理(线程创建、线程退出、线程回收、线程分离、其它线程函数)
线程管理 (1)What(什么是线程管理) 对程序中线程的创建、调度、同步、退出、回收等操作进行有效的控制和协调 (2)Why(为什么要管理线程) 充分利用系统资源,提高程序的并发的性能和稳定性。但如果管理不当,…...
【JVM】常见面试题
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. JVM 中的内存区域划分2. JVM 的类加载机制2.1 加载(Loading)✨双亲委派模型2.2 验证(Verification)2.3 准…...
0805作业+梳理
一、作业: 代码: create.c #include<myhead.h> int main(int argc, const char *argv[]) {//创建一个有名管道文件if(mkfifo("./linux",0664)-1){perror("mkfifo linux error");return -1;}getchar();system("rm linux…...
Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)
前言 第一部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 在第二部分中之所以引人 ClassLoader,是因为 ClassLoader 与线程不无关系࿰…...
字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 s 只包含小写字母 示例 1: 输入: s "leetcode" 输出: 0示例 2: 输入: s "loveleetcode" 输出: 2示例 3: 输…...
leetcode数论(3044. 出现频率最高的质数)
前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择࿱…...
70.加载功能菜单功能设计
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:69.搭建分析工具界面 以 69.搭建分析工具界面 它的代码为基础进行修改 效果图…...
在线Banner设计工具大比拼:谁更胜一筹
在数字营销的时代,一个吸引眼球的 Banner 广告是吸引潜在客户、提高品牌知名度的关键。为了帮助营销人员和设计师快速创建专业的 Banner 广告,市面上出现了多种易于使用的 Banner 设计工具。本文将介绍几个受欢迎的 Banner 设计工具,包括即时…...
C++ STL copy, move 用法
一:功能 正向(从前向后的顺序)拷贝/移动操作,将一个容器元素拷贝/移动到另一容器中。 二:用法 #include <iostream> #include <vector> #include <algorithm>int main() {std::vector<std::str…...
MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!
weekly 2024-08-05 MoonBit更新 JSON字面量支持array spread。 let xs: Array[json.JsonValue] [1, 2, 3, 4] let _: json.JsonValue [1, ..xs]增加了类型别名的支持,主要是为了渐进式代码重构和迁移,而不是某种给类型简短名字的机制。例如…...
Android开发之事件分发
#来自ウルトラマンゼロ(哉阿斯) 1 Activity 构成 平常布局展示在ContentView中。 2 事件分发 事件分发的本质其实就是把事件(Touch)封装成 MotionEvent 类,然后传递给 View 的层级处理。 MotionEvent 事件类型主要有…...
PyTorch深度学习实战(2)——PyTorch快速入门
PyTorch的简洁设计使得它易于入门,在深入介绍PyTorch之前,本文先介绍一些PyTorch的基础知识,以便读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。 1 Tensor Tensor是PyTorch中最重要的数据结构&#…...
ServletConfig、ServletContext超详细讲解
文章目录 前言一、ServletConfig的使用1.ServletConfig定义2.ServletConfig的API3.ServletConfig的测试代码: 二、 ServletContext的使用1.ServletContext定义2.ServletContext如何用3. ServletContext其他重要API 总结 前言 ServletConfig接口代表了Servlet的配置信…...
【文献阅读】GraphAny: A Foundation Model for Node Classification on Any Graph
Abstract 可以执行任何新任务而无需特定训练的基础模型已经在视觉和语言应用中引发了机器学习的革命。然而,涉及图结构数据的应用仍然是基础模型面临的一个难题,因为每个图都有独特的特征和标签空间。传统的图机器学习模型,如图神经网络&…...
动态规划.
目录 (一)递归到动规的一般转化方法 (二)动规解题的一般思路 1. 将原问题分解为子问题 2. 确定状态 3. 确定一些初始状态(边界状态)的值 4. 确定状态转移方程 (三)能用动规解…...
PHP常用函数
字符串 strlen()获取字符串长度strpos()在字符串内查找一个字符或一段指定的文本,返回第一次出现的位置或falsestripos()同上,但不区分大小写strrpos()同上上,返回最后一…...
完全用python 实现消息中间件4
为了进一步完善这个消息中间件,我们可以添加以下功能: 消息确认:客户端可以发送一个确认消息,表明消息已经被正确接收。消息队列:使用一个队列来存储消息,而不是直接存储在字典中。多消费者支持࿱…...
公司新来的两个Java后端,因题背太熟轻松过面试?
以前面试是背八股文,而2024年的后端面试都是流行问场景题!建议大家把面试想简单一点,顺的场景题直接给有需要的人,希望能对大家有所帮助! 由于平台篇幅原因,很多java面试资料内容展示不了,需要…...
Pinia状态管理库
为了跨组件传递JWT令牌,我们就会利用Pinia状态管理库,它允许跨组件或页面共享状态。 使用Pinia步骤: 安装pinia:cnpm install pinia 在vue应用实例中使用pinia 在src/stores/token.js中定义store 在组件中使用store 1.在main.js文…...
利用ffmpeg转码视频为gif图片,调整gif图片的大小
【1】压缩gif图片大小 一般发布技术文章的时候经常要插入GIF图演示软件效果,但是一些编辑器总是限制大小,但是录制的时候可能一不小心就搞大了。 要将 GIF 图片大小限制在 10MB 内,可以使用 FFmpeg 进行压缩。 以下是一个ffmpeg的命令&…...
Arctic数据压缩与序列化:LZ4压缩如何提升性能10倍的终极指南
Arctic数据压缩与序列化:LZ4压缩如何提升性能10倍的终极指南 【免费下载链接】arctic High performance datastore for time series and tick data 项目地址: https://gitcode.com/gh_mirrors/ar/arctic Arctic是一个专为时间序列和tick数据设计的高性能数据…...
保姆级教程:用Cadence Sigrity Power DC为海思HI3516A板卡提取电源树(附常见报错处理)
从零掌握Cadence Sigrity Power DC电源树提取:HI3516A实战避坑指南 刚拿到海思HI3516A评估板时,电源网络分析往往是硬件工程师的第一个拦路虎。面对密密麻麻的PCB走线和数十个电源域,传统手动梳理方式不仅耗时费力,还容易遗漏关键…...
Neo.mjs性能优化:如何实现每秒40,000+增量更新的秘密
Neo.mjs性能优化:如何实现每秒40,000增量更新的秘密 【免费下载链接】neo The application worker driven frontend framework 项目地址: https://gitcode.com/gh_mirrors/neo/neo Neo.mjs作为一款由应用工作器驱动的前端框架,以其卓越的性能表现…...
如何让Windows 11告别臃肿?Win11Debloat完整指南帮你一键优化系统
如何让Windows 11告别臃肿?Win11Debloat完整指南帮你一键优化系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...
关键词搜索和SEO优化有什么关系_常见的关键词搜索误区有哪些
<h2>关键词搜索和SEO优化有什么关系</h2> <p>在当前数字化时代,网站流量的获取和保持已成为每一个企业和个人的重要目标。在这其中,关键词搜索和SEO优化是两个密不可分的环节。它们之间的关系不仅丰富了我们的网站内容,还帮…...
比特币钱包密码与助记词恢复实战指南:6大核心模块掌握btcrecover全功能
比特币钱包密码与助记词恢复实战指南:6大核心模块掌握btcrecover全功能 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assista…...
GLM-5.1 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路
GLM-5.1 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路 本文介绍了 HagiCode 平台近期的重要更新——智谱 AI GLM-5.1 模型的全面支持,以及 Gemini CLI 作为第十个 Agent CLI 的成功集成。这两项更新进一步强化了平台的多模型能力和多 CLI 生态…...
静息态fMRI分析避坑指南:DPARSFA预处理中那些容易踩的‘雷’(附解决方案)
静息态fMRI分析实战避坑手册:DPARSFA预处理中的7个致命陷阱与修复方案 当你熬夜跑完DPARSFA预处理流程,满心期待地点开结果图时——突然发现ReHo图像像被泼了墨水,fALFF数值全部溢出,或是软件弹出一串看不懂的报错代码。这种崩溃…...
告别C盘爆满!手把手教你配置Miniforge,让所有虚拟环境乖乖待在D盘
彻底解放C盘空间:Miniforge虚拟环境全迁移至D盘实战指南 每次打开资源管理器看到C盘飘红的存储条,心跳都会漏半拍——这大概是Windows开发者最熟悉的焦虑场景。特别是当你发现conda创建的虚拟环境正悄无声息吞噬着宝贵的系统盘空间时,那种无…...
拓扑排序别再死记硬背了!用邻接矩阵手搓一个(附C++/C语言单文件实现)
拓扑排序的工程化实现:从邻接矩阵到零依赖代码实战 第一次接触拓扑排序时,我盯着教科书上的算法描述看了半天——"选择一个入度为0的顶点并输出"、"从图中删除该顶点和所有以它为起点的有向边"——这些抽象的描述让我困惑不已。直到…...
