位置: 编程技术 - 正文

linux 下实现sleep详解及简单实例(linux sleep 2)

编辑:rootadmin

推荐整理分享linux 下实现sleep详解及简单实例(linux sleep 2),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux中sleep,关于linux 中sleep()函数说明,linux sleep 0,linux sleep 0,linux sleep进程,linux sleep进程,linuxsleep函数,linux中sleep,内容如对您有帮助,希望把文章链接给更多的朋友!

linux 下实现sleep详解及简单实例

sleep:

普通版本

1、基本设计思路:

1>注册SIGALRM信号的处理函数; 2>调用alarm(nsecs)设定闹钟;

3>调&#;pause等待,内核切换到别的进程运行;

4>nsecs秒之后,闹钟超时,内核发SIGALRM给这个进程 ;

5>从内核态返回这个进程的&#;户态之前处理未决信号,发现有SIGALRM信号,其处理函数是sig_alrm;

6> 切换到用户态执行sig_alrm函数,进&#;sig_alrm函数时SIGALRM信号被&#;动屏蔽,从sig_alrm函数返回SIGALRM信 号&#;动解除屏蔽。然后&#;动执&#;系统调用sigreturn再次进入内核,再返回用户态继续执行进程的主控制流程(main函数调&#;的mysleep函数);

7>pause函数返回-1,然后调&#;alarm(0)取消闹钟,调&#;sigaction恢复SIGALRM信号以前的处理动作。

2、实现代码

相关函数分析:

pause函数使调&#;进程挂起直到有信号递达。如果信号的处理动作是终&#;进程,则进程终&#;,pause函数没有机会返回;如果信号的处理动作是忽略,则进程继续处于挂起状态,pause不返回;如果信号的处理动作是捕捉,则调&#;了信号处理函数之后pause返回-1,errno设置为EINTR, 所以pause只有出错的返回值 。

sigaction函数

sigaction函数可以读取和修改与指定信号相关联的处理动作。调&#;成功则返回0,出错则返回- 1。 signo是指定信号的编号。若act指针&#;空,则根据act修改该信号的处理动作。若oact指针非 空,则通过oact传出该信号原来的处理动作。

函数sigemptyset初始化set所指向的信号集,使其中所有信号的对应bit清零,表&#;该信号集不包含 任何有效信号。

二、优化版本

所需函数分析

linux 下实现sleep详解及简单实例(linux sleep 2)

sigsuspend没有成功返回值,只有执&#;了&#;个信号处理函数之后sigsuspend才返回,返回值为-1,errno设置为EINTR。调&#;sigsuspend时,进程的信号屏蔽字由sigmask参数指定,可以通过指定sigmask来临时解除对某 个信号的屏蔽,然后挂起等待,当sigsuspend返回时,进程的信号屏蔽字恢复为原来的值,如果原来对该信号是屏蔽的,sigsuspend返回后仍然是屏蔽的。 sigsuspend函数与pause函数:都可以将程序挂起,但是sigsuspend函数可以实现对信号屏蔽字的解除与挂起。

sigprocmask

调&#;函数sigprocmask可以读取或更改进程的信号屏蔽字(阻塞信号集)。

如果oset是&#;空指针,则读取进程的当前信号屏蔽字通过oset参数传出。如果set是&#;空指针,则 更改进程的信号屏蔽字,参数how指&#;如何更改。如果oset和set都是&#;空指针,则先将原来的信号 屏蔽字备份到oset&#;,然后根据set和how参数更改信号屏蔽字。

how的选项意义

如果调&#;sigprocmask解除了对当前若&#;个未决信号的阻塞,则在sigprocmask返回前,&#;少将其中&#;个信号递达。

代码实现:

优化版本解决了普通版本存在的竞态问题。我们重新审视一下普通版本的时序问题。

1、设置SIGALRM信号的处理函数;

2、调用alarm()函数设置闹钟;

3、内核选取更高优先级的进程来取代当前进程,并且这样的进程很多,同时执行时间又很长;

4、闹钟超时了,内核发送SIGALRM信号给该进程,并且处于未决状态;

5、优先级更高的进程结束后,内核要调度回这个进程执&#;。 SIGALRM信号递达,执&#;处理函 数sig_alrm之后再次进&#;内核。

6、返回这个进程的主控制流程,alarm(nsecs)返回,调&#;pause()挂起等待。

7、可是现在SIGALRM信号已经被处理,进程会导致错误。

在一个进程运行过程中,因为由于异步,所以可能被其他优先级更高的进程,由于时序问题而引发的错误问题。这样的问题称为竞态问题。

优化版本中,先将设置SIGALRM信号的处理函数,然后将SIGALRM信号进行屏蔽,然后调用alarm()函数设置闹钟,然后调用sigprocmask()函数对SIGALRM信号解除屏蔽然后挂起等待,这样就解决了竞态问题。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

使用ntpdate工具校正linux服务器时间(实现方法) 当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。安装:yuminstallntpdatentpdate简单用法:#ntpdateip#ntpdate...以下是一些可用的NTP服务

Linux bash删除文件中含“指定内容”的行功能示例 本文实例讲述了Linuxbash删除文件中含指定内容的行功能。分享给大家供大家参考,具体如下:#!/bin/sh#功能:删除文件中含"指定内容"的行#运行方式:./dline.

Vim中列出TODO与FIXME等备注的方法 前言很多程序员,包括我,会在写代码的时候,习惯性的用TODO,FIXME,HACK等作为一些注释的前缀。这样方便自己和后来者预先知道相关注释和代码的状况

标签: linux sleep 2

本文链接地址:https://www.jiuchutong.com/biancheng/376745.html 转载请保留说明!

上一篇:Linux 中可重入函数与不可重入函数详解(linux conky)

下一篇:使用ntpdate工具校正linux服务器时间(实现方法)(ntp ntpdate)

  • 核定征收的一般纳税人开专票怎么入账
  • 公司收到劳务发票怎么申报个税
  • 个体工商户税率2023
  • 金融业产值和金融业增加值有什么不同
  • 技术支持费用取费依据
  • 利润表中所得税费用包括哪些
  • 个体户开票超30次后如何开票
  • 关税应纳税额计算公式
  • 汇票和支票的区别是什么
  • 小规模纳税人取得的专票转为一般纳税人之后能抵扣吗
  • 开发间接费用是指
  • 母公司收到的分红计入利润吗
  • 工伤费用的伤残补助金属于福利费吗
  • 公司拍摄费计入什么科目
  • 营改增之后还有营业税金及附加吗
  • 增值税开票员的岗位职责
  • 人工费收税吗
  • 房开公司需要资质吗
  • 委托研发受托方怎么做账
  • 所得税费用可以抵减利润吗
  • 员工宿舍可以扣除住房租金支出吗
  • 股权无偿赠与子女怎么办理手续
  • 我想看一下这个月几日
  • 社保不计提会计分录
  • 事业单位工程岗位职责
  • 怎么进入登录
  • window10主题的颜色浅了
  • 印花税减免需要做账吗现在
  • 没收到电费账单怎么办
  • 如何在Windows 11上卸载更新
  • mysql-relay-bin
  • 公司整体收购协议书范本
  • 收费公路通行费财政电子票据可以抵扣吗
  • UserScripts Safari 苹果iOS上特别好用且免费的脚本插件,五分钟学会
  • it最高工资
  • 其他业务收入属于收入吗
  • 一般纳税人使用的是什么会计准则
  • 图书发票怎么开
  • 代开增值税额与实际缴款额差一分钱如何入账
  • 波士顿房价数据集可视化
  • 浅谈人工智能时代财务会计向管理会计的转型
  • php获取服务端ip
  • cd oobe是什么命令
  • 债权转让收益需缴税吗
  • 小规模纳税企业销售货物或者提供应税劳务
  • 出口资质证书
  • 查看db2状态
  • sqlserver行列转换多行多列
  • 汇算清缴时发现收入少了
  • 发票没有纳税人识别号怎么重开
  • 企业取得的财政性资金
  • 代金券抵帐怎么退款
  • 注册资金没有到位
  • 互联网企业资产评估
  • 哪些发票可以提供发票
  • 小规模转一般纳税人条件最新政策
  • 水电费没有发票可以入账吗
  • 应收账款坏账准备借贷方向
  • 销售费用进项税抵扣
  • 外商投资企业开什么发票
  • 汇算清缴资产总额全年季度平均值怎么算
  • 车子报废车子怎么处理
  • mysql数据库主从数据不一致
  • win8怎么扩展c盘
  • windows10x预览版
  • 如何设置微信语音来电铃声
  • wpr是什么软件
  • win7还是win8好用
  • Win7 64位系统声卡重装过程中出现失败的解决方法
  • win7中文显示问号
  • xp系统怎么打开开机启动项
  • window7系统中的桌面指什么
  • win7玩游戏全屏
  • cocos2d android 游戏开发学习——CCAction(一)
  • unity资源包管理器
  • unity 断点
  • js拖动效果
  • js字段截取
  • 税务师报考条件和时间2021湖北
  • 高速公路过路费电子发票在哪里开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设