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

笔记整理—linux进程部分(8)线程与进程

        前面用了高级IO去实现鼠标和键盘的读取,也说过要用多进程方式进行该操作:

int mian(void)
{int ret=-1;int fd=-1;char bug[100]={0};ret=fork();if(0==ret){//子进程,读鼠标}if(0<ret){//父进程,读键盘}else{perror("fork");}}

        使用多线程实现宏观上的并发方法:①cpu分时复用,单核cpu实现宏观上并发;②实现多任务系统需求(多任务的客观需求)。是任务轮询,让cpu能干更多的活。

        进程技术的劣势:①进程间相互切换的开销很大,因为每执行一次进程切换,又轮到当前进程时候需要读出断点,再切换进程以此往复。②进程与进程间又天生的隔离,通信效率低。

        解决方案——使用线程技术。线程救赎保留了进程多任务的特性,改进了线程间切换与通信的效率,多线程在多核心cpu上更具有优势。

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
void *func(void *arg)
{//读键盘
}int main(void)
{pthread_t th=-1;ret=pthread_create(&th,NULL,func,NULL);if(ret!=0){err;return -1;}//开始主任务,读鼠标
}

        编译时,使用-lpthread链接线程库:

gcc xxx.c -lpthread

        线程是一种轻量的进程,线程是参与调度的最小单元,一个进程可以有多个线程。

        线程的优势,①像进程一样能被OS单独调度。②同一进程的多个线程间的通信十分简单(就是函数与函数间通信一样的简单)。③多核心的cpu架构下效率能最大化,多线程运行在不同的核心上,多核cpu(堆成多处理器架构SMP)。

        线程常用函数:

        ①进程创建于回收

pthread_create()主线程创建子进程
pheread_join()主线程用于等待回收子线程
pheread_detach()主线程于子线程分离,分离后自己回收自己

        ②线程取消:一个线程可以被另一个线程中止

pthread_cancel()一个线程调用,终止另一个线程(主销子)
pthread_setcancelstate()子线程对线程取消信号的反应(线程十分运行被信号终止)
pthread_setcanceltype()线程终止时候的模式

        ③线程函数退出相关:子线程自己return一类

pthread_exit()子线程标准退出麻烦和值给pthread_join
pthread_cleanup_push()线程同步相关,用于清理的函数压栈保存
pthread_pop用着清理函数的取出是否执行,保证cleanup的函数能在主线程结束时依然能执行于保存

        ④获得自己的线程ID

pthread_self()

        pthread的p是posix是Unix标准。

        线程同步的方法——信号量。

        使用线程实现一个线程输入字符,一个线程统计输出。

        子线程void func(void *arg):①子线程是一个循环。②子线程阻塞等单子线程激活,等待传递buf。③计数完成,变为阻塞态,等待主线程buf。

        主线程int main()①创建子线程。②接受字符串。③激活子线程干活实现线程同步。

        

char buf[200]={0};
sem_t sem;void *func(void *arg)
{sem_wait(&sem);//阻塞等待信号while(strncmp(buf,"end",3)!=0){printf("本次打印%d个字符\n",strlen(buf));memset(buf,0,sizeof(buf));sem_wait(&sem);//阻塞while}pthread_exit(NULL);//线程return
}int main(void)
{int ret=-1;pthread_t th=-1;//线程属性sem_init(&sem,0,0);//信号初始化ret=pthread_create(&th,NULL,func,NULL);if(0!=ret){线程申请errexit(-1);}printf("输入一个字符串\n");while(scanf("%s",buf)){if(!strncmp(buf,"end",3))//接收到end字符{printf(“end\n”);sem_post(&sem);//发信号,子线程做最后一次判别工作break;}sem_post(&sem);//正常接受字符串,发信号通知子线程干活}//回收子线程ret=pthread_join(th,NULL);//(线程号,参数)if(0!=ret){回收失败exit(-1);}sem_destroy(&sem);//回收信号return 0;
}

        本次使用的信号,基本上是让程序称为盘子里的鱼,戳一下,动一下,也就是很像flag,1表示work,0表示不动,每动一下flag就置位为0那种。

相关文章:

笔记整理—linux进程部分(8)线程与进程

前面用了高级IO去实现鼠标和键盘的读取&#xff0c;也说过要用多进程方式进行该操作&#xff1a; int mian(void) {int ret-1;int fd-1;char bug[100]{0};retfork();if(0ret){//子进程&#xff0c;读鼠标}if(0<ret){//父进程&#xff0c;读键盘}else{perror("fork&quo…...

使用 Python 实现遗传算法进行无人机路径规划

目录 使用 Python 实现遗传算法进行无人机路径规划引言1. 遗传算法概述1.1 定义1.2 基本步骤1.3 遗传算法的特点 2. 使用 Python 实现遗传算法2.1 安装必要的库2.2 定义类2.2.1 无人机模型类2.2.2 遗传算法类 2.3 示例程序 3. 遗传算法的优缺点3.1 优点3.2 缺点 4. 改进方向5. …...

JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级

1 synchronized 和 lock的区别 synchronized是一个关键字&#xff0c; lock是一个接口&#xff0c;实际使用的是实现类 synchronized通过触发的是系统级别的锁机制&#xff0c; lock是API级别的锁机制 synchronized自动获得锁&#xff0c;自动释放锁。 lock需要通过方法获得锁…...

自动驾驶 车道检测实用算法

自动驾驶 | 车道检测实用算法 车道识别是自动驾驶领域的一个重要问题&#xff0c;今天介绍一个利用摄像头图像进行车道识别的实用算法。该算法利用了OpenCV库和Udacity自动驾驶汽车数据库的相关内容。 该算法包含以下步骤&#xff1a; 摄像头校准&#xff0c;以移除镜头畸变&…...

22.第二阶段x86游戏实战2-背包遍历REP指令详解

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…...

java 的三种IO模型(BIO、NIO、AIO)

java 的三种IO模型&#xff08;BIO、NIO、AIO&#xff09; 一、BIO 阻塞式 IO&#xff08;Blocking IO&#xff09;1.1、BIO 工作机制1.2、BIO 实现单发单收1.3、BIO 实现多发多收1.4、BIO 实现客户端服务端多对一1.5、BIO 模式下的端口转发思想 二、NIO 同步非阻塞式 IO&#…...

低级语言和高级语言、大小写敏感、静态语言和动态语言、链接

低级语言和高级语言 一般而言&#xff0c;更接近硬件的语言被称为低级语言&#xff0c;反之&#xff0c;更远离硬件被称为高级语言。C语言既有低级语言的特点&#xff0c;又有高级语言的特点&#xff0c;又被称为系统语言。Java/Python一般被称为高级语言。 大小写敏感 DOS/Win…...

P3197 [HNOI2008] 越狱

题目传送门 题面 [HNOI2008] 越狱 题目描述 监狱有 n n n 个房间&#xff0c;每个房间关押一个犯人&#xff0c;有 m m m 种宗教&#xff0c;每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同&#xff0c;就可能发生越狱&#xff0c;求有多少种状态可能发生越狱。 …...

会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰

调高分辨率后&#xff0c;mp4视频还是不清晰。哪怕全部使用4K级素材&#xff0c;仍然剪不出理想中的高画质作品。不是你的操作有问题&#xff0c;而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术&#xff0c;该公司研发的会声会影视频剪辑软件&#xff0c;在过去的20…...

Linux:进程调度算法和进程地址空间

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 进程调度算法 1.1 进程队列数据结构 1.2 优先级 ​编辑 1.3 活动队列 ​编辑 1.4 过期队列 1.5 active指针和expired指针 1.6 进程连接 二 进程地址空间 2.1 …...

TCP ---滑动窗口以及拥塞窗口

序言 在上一篇文章中我们介绍了 TCP 中的协议段格式&#xff0c;以及保证其可靠传输的重传机制&#xff0c;着重介绍了三次握手建立连接&#xff0c;四次挥手断开连接的过程(&#x1f449;点击查看)。  这只是 TCP 保证通信可信策略的一部分&#xff0c;现在让我们继续深入吧&…...

第十二章--- fixed 和 setprecision 函数、round 函数、进制转换及底层逻辑

1. 保留几位小数 在C中&#xff0c;如果你想要控制输出的小数点后的位数&#xff0c;可以使用<iomanip>头文件提供的fixed和setprecision函数。这里的fixed用于设置浮点数的输出格式为定点表示法&#xff0c;而setprecision(n)则用来指定小数点后保留的位数。具体用法如…...

ASP.NetCore---I18n(internationalization)多语言版本的应用

文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码&#xff1a;5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目&#xff0c;应该…...

vue3 环境配置vue-i8n国际化

一.依赖和插件的安装 主要是vue-i18n和 vscode的自动化插件i18n Ally https://vue-i18n.intlify.dev/ npm install vue-i18n10 pnpm add vue-i18n10 yarn add vue-i18n10 vscode在应用商城中搜索i18n Ally&#xff1a;如图 二.实操 安装完以后在对应项目中的跟package.jso…...

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频&#xff0c;10分钟了解uni-app,为什么要选择uni-app&#xff1f;,功能框架图,一套代码&#xff0c;运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作&#xff1a;HBuilder X 软件 HBuilder X 官网下载&#xf…...

CentOS 7文件系统

从centos7开始&#xff0c;默认的文件系统从ext4变成了XFS。随着虚拟化的应用越来越广泛&#xff0c;作为虚拟化磁盘来源的大文件&#xff08;单个文件几GB级别&#xff09;越来越常见。 1.XFS组成部分&#xff1a; XFS文件系统在数据的分布上主要划分为三部分&#xff1a;数据…...

vue源码解析(源码解析学习大纲)

文章目录 Vue源码解析入手方向大纲1.核心概念1-1.响应式系统1-2. 组件1-3. 虚拟DOM1-4. 指令1-5. 生命周期钩子 2.虚拟DOM2-1. 概念2-2. 工作流程2-3. 示例2-4.总结 3.组件系统3-1. 组件的定义3-2. 组件的创建3-3. 组件的模板3-4. 生命周期3-5. 事件处理3-6. 插槽&#xff08;S…...

工行企业网银U盾展期后有两个证书问题的解决方法

工行企业网银U盾证书快到期后&#xff0c;可以自助展期&#xff0c;流程可以根据企业网银提示页面操作。操作后&#xff0c;可能存在两个新旧两个证书并存的情况&#xff0c;致使网银转账等操作失败&#xff0c;如图&#xff1a; 其原因是新证书生成后&#xff0c;旧证书没有删…...

《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令

List item 本篇介绍Linux文件权限控制及文件操作相关的命令&#xff0c;看完本文&#xff0c;有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型&#xff0c;始终记住那句话&#xff1a;Linux系统下&a…...

前端框架React的详细的学习方法和过程

学习React作为前端架构的一部分&#xff0c;是一个系统且逐步深入的过程。以下是一个详细的学习方法和过程&#xff0c;可以帮助你有效地掌握React&#xff1a; 1. 理解React的基础知识 首先&#xff0c;你需要了解React的基本概念&#xff0c;包括它是什么、为什么使用它以及…...

掌握这四大趋势,让你的AI Agent真正“能干活”!CSDN收藏必备指南

本文深入探讨了企业级AI Agent的四大核心趋势&#xff1a;MCP协议实现可扩展集成、GraphRAG提升回答一致性、AgentDevOps确保行为质量与推理链路稳定性、RaaS模式实现结果计费。文章指出&#xff0c;这些趋势共同推动AI Agent从“可用”到“好用”的跨越&#xff0c;并提供了实…...

Web无障碍性自动化检查:CLI工具集成与工程实践指南

1. 项目概述&#xff1a;一个为开发者赋能的Web无障碍性CLI工具 如果你是一名前端开发者、测试工程师&#xff0c;或者正在构建一个需要服务广泛用户群体的Web应用&#xff0c;那么“无障碍性”&#xff08;Accessibility&#xff0c; 常缩写为 a11y&#xff09;这个词对你来说…...

基于小安派-Eyes-DU的PWM呼吸灯实现:从环境搭建到代码烧录全解析

1. 项目概述上周&#xff0c;安信可开源硬件社区发布了一款名为“小安派-Eyes-DU”的新板子&#xff0c;我第一时间就入手了。作为一名嵌入式开发爱好者&#xff0c;拿到新板子后的第一件事&#xff0c;自然是想办法“点亮”它&#xff0c;看看它的能耐。官方资料里提到了一个亮…...

JetBrains IDE试用重置终极指南:高效管理30天评估期

JetBrains IDE试用重置终极指南&#xff1a;高效管理30天评估期 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE试用重置工具&#xff08;ide-eval-resetter&#xff09;是一款专为IntelliJ IDEA、P…...

开源实时监控告警引擎OpenAlerts:从原理到生产部署实战

1. 项目概述&#xff1a;一个开源的实时监控与告警引擎在运维、开发和业务监控的日常工作中&#xff0c;我们常常面临一个核心痛点&#xff1a;如何从海量的日志、指标和事件数据中&#xff0c;快速、准确地识别出异常&#xff0c;并及时通知到正确的人。市面上的商业监控方案功…...

代码审查时最该关注的不是语法,而是这五个“坏味道”

“这段代码能跑&#xff0c;但总觉得哪里不对劲。”如果你在审查代码时有过这种感觉&#xff0c;说明你已经嗅到了代码的坏味道。作为软件测试从业者&#xff0c;我们往往比开发人员更早感受到坏味道带来的痛苦——一个看似简单的变更导致回归测试大面积失败&#xff0c;一个边…...

基于RAG与LLM的智能文献分析工具OpenResearcher:从部署到实战全解析

1. 项目概述&#xff1a;一个为研究者量身打造的AI驱动开源工具箱 如果你是一名科研工作者、学术写手&#xff0c;或者任何需要深度处理文献、进行系统性知识梳理的人&#xff0c;那么你大概率经历过这样的场景&#xff1a;面对海量的PDF文献&#xff0c;手动下载、整理、阅读、…...

Armv8-A内存模型特性寄存器详解与应用

1. Armv8-A内存模型特性寄存器概述在Armv8-A架构中&#xff0c;内存模型特性寄存器&#xff08;Memory Model Feature Registers&#xff0c;简称MMFR&#xff09;是一组关键的系统寄存器&#xff0c;用于描述处理器实现的内存管理功能特性。这些寄存器采用只读访问模式&#x…...

深入PEX8796:从Serdes到Virtual Switch,图解PCIe交换芯片的三种工作模式

深入解析PEX8796&#xff1a;PCIe交换芯片的架构设计与模式创新 在高速数据传输领域&#xff0c;PCIe交换芯片如同交通枢纽般连接着计算系统的各个组件。作为PLX公司&#xff08;现已被博通收购&#xff09;的经典之作&#xff0c;PEX8796凭借其灵活的架构设计和多样化的操作模…...

dingtalk-openclaw-connector:打通钉钉与AI的插件化连接器架构解析

1. 项目概述&#xff1a;一个打通钉钉与AI能力的“连接器”如果你正在企业内部尝试部署AI应用&#xff0c;比如一个能自动处理工单的智能客服&#xff0c;或者一个能帮你分析周报的智能助手&#xff0c;那么你大概率会遇到一个核心难题&#xff1a;如何让AI能力无缝融入员工每天…...