linux的基础知识——时序竞态
文章目录
- 1.pause函数
- 1.1 pause函数例子
- 2.时序问题
- 3.解决时序问题
- 4.例子:sigsuspend函数的举例
- 5.总结
1.pause函数
1.1 pause函数例子
\qquad程序依次从1到无穷输出数字,当遇到100的整数倍时就暂停,键盘输入ctrl+c,就继续输出。
#include<stdio.h>
#include<signal.h>
#include<unistd.h>void docatch(int signo)
{printf("信号已被捕捉\n");
}int main()
{int i;signal(SIGINT,docatch);for(i=0; ;i++){if(i%100==0){pause();}else{printf("%d\n",i);}}return 0;
}
2.时序问题
3.解决时序问题
4.例子:sigsuspend函数的举例
\qquad使用alarm函数和sigsuspend函数实现sleep函数功能
#include<stdio.h>
#include<stdlib.h>
#include<error.h>
#include<unistd.h>
#include<signal.h>void catch_sigalrm(int signo)
{;
}unsigned int mysleep(unsigned int seconds)
{struct sigaction newact,oldact;sigset_t newmask,oldmask,suspmask;unsigned int unslept;newact.sa_handler = catch_sigalrm;sigemptyset(&newact.sa_mask);newact.sa_flags = 0;sigaction(SIGALRM,&newact,&oldact);sigemptyset(&newmask);sigaddset(&newmask,SIGALRM);sigprocmask(SIG_BLOCK,&newmask,&oldmask);alarm(seconds);suspmask = oldmask;sigdelset(&suspmask,SIGALRM);sigsuspend(&suspmask);unslept = alarm(0);sigaction(SIGALRM,&oldact,NULL);sigprocmask(SIG_SETMASK,&oldmask,NULL);return(unslept);
}int main()
{int i;for(i=0;i<5;i++){printf("hello\n");mysleep(2);}return 0;
}
5.总结
linux的基础知识——时序竞态相关推荐
- Linux系统时间和时序,什么是时序竞态 Linux系统时序竞态问题分析
什么是时序竞态?将同一个程序执行两次,正常情况下,前后两次执行得到的结果应该是一样的.但由于系统资源竞争的原因,前后两次执行的结果有可能得到不一样的结果,这个现象就是时序竞态.时序竞态前导例 在讲时序 ...
- Linux信号、进程间关系pause, 时序竞态,sigsuspend
1. pause函数 --> wait for signal 该函数可以造成进程主动挂起,等待信号唤醒.调用该系统调用的进程将处于阻塞状态(主动放弃CPU)直到有信号递达将其唤醒. int pa ...
- linux操作系统之竞态条件(时序竞态)
(1)时序竞态:前后两次运行同一个程序,出现的结果不同. (2)pause函数:使用该函数会造成进程主动挂起,并等待信号唤醒,调用该系统调用的进程会处于阻塞状态(主动放弃CPU) 函数原型:int p ...
- Linux系统编程----8(竞态条件,时序竞态,pause函数,如何解决时序竞态)
竞态条件(时序竞态): pause 函数 调用该函数可以造成进程主动挂起,等待信号唤醒.调用该系统调用的进程将处于阻塞状态(主动放弃 cpu) 直 到有信号递达将其唤醒,等不到一直等 int paus ...
- Linux信号实现精确到微秒的sleep函数:通过sigsuspend函数解决时序竞态问题
原理就是先使用定时器定时,然后再使用pause函数或者sigsuspend函数主动阻塞挂起,最终恢复现场. 如果使用pause函数的话,优点是使用简单,缺点是有可能产生时序竞态,导致进程一直阻塞下去: ...
- Linux系统编程(五)时序竞态
时序竞态 产生原因 改进 总结 产生原因 #include <cstdio> #include <stdio.h> #include <sys/time.h> #i ...
- linux多线程时序问题,Linux时序竞态问题(sleep函数的实现)
时序竞态是指同样的程序,多次调用运行的结果不同,这是由于争夺系统资源所造成的.比如说我们要使用alarm和pause函数来实现一个sleep的功能,那么由于alarm函数的实现过程并不是一个原子操作, ...
- Linux系统基础知识
Linux系统基础知识 1.在Linux系统中,以文件方式访问设备. 2. Linux内核引导时,从文件 /etc/fstab中读取要加载的文件系统. 3. Linux文件系统中每个文件用 ino ...
- Linux操作系统基础知识学习
Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目, ...
最新文章
- b转换成mb php_攻防世界之WEB篇,php反序列化漏洞,网络安全入门篇
- 深入了解Kubernetes CRD开发工具kubebuilder
- [转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention
- angularjs ng-click传参控制ng-repeat元素显示与隐藏
- 时间序列与R语言应用(part4)--自回归AR模型及其平稳性条件
- 牛客网【每日一题】3月27日 数学考试
- How to uninstall Internet Explorer 7
- 数学奥赛大神,两次以满分获IMO金牌,北大数学博士提前毕业
- 遇上DG挖矿病毒的处理记录
- 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
- Python天天美味(4) - isinstance判断对象类型
- 文件服务和对象存储服务器,对象存储与块存储服务
- 第006讲 多媒体页面 标签汇总
- 计算机恶搞bat代码,电脑重启bat代码怎么设置 电脑整人bat代码大全
- CART决策树算法的Python实现(注释详细)
- cdr2022更新24.1版CorelDRAW2022稳定版
- 3.路由实现(phalapi框架总结)
- VS2015 解决 “有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”问题
- gc buffer busy的优化
- [2021.10.30][uml]UML顺序图规范
热门文章
- LeetCode 963. 最小面积矩形 II
- 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)
- android monkey压力测试,Android-Monkey 压力测试
- java 资源锁定_如何在Java中创建时正确锁定资源
- 同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...
- 服务器上有涉密文件,涉密文件保密管理规定
- 【Spring Cloud中文社区】正式启动
- 互联网优秀架构师必读书单V2.0
- 参会邀请 - CCKS2020 | 2020全国知识图谱与语义计算大会(CCKS2020)明日开幕
- docker build 中的上下文路径