文章目录

  • 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的基础知识——时序竞态相关推荐

  1. Linux系统时间和时序,什么是时序竞态 Linux系统时序竞态问题分析

    什么是时序竞态?将同一个程序执行两次,正常情况下,前后两次执行得到的结果应该是一样的.但由于系统资源竞争的原因,前后两次执行的结果有可能得到不一样的结果,这个现象就是时序竞态.时序竞态前导例 在讲时序 ...

  2. Linux信号、进程间关系pause, 时序竞态,sigsuspend

    1. pause函数 --> wait for signal 该函数可以造成进程主动挂起,等待信号唤醒.调用该系统调用的进程将处于阻塞状态(主动放弃CPU)直到有信号递达将其唤醒. int pa ...

  3. linux操作系统之竞态条件(时序竞态)

    (1)时序竞态:前后两次运行同一个程序,出现的结果不同. (2)pause函数:使用该函数会造成进程主动挂起,并等待信号唤醒,调用该系统调用的进程会处于阻塞状态(主动放弃CPU) 函数原型:int p ...

  4. Linux系统编程----8(竞态条件,时序竞态,pause函数,如何解决时序竞态)

    竞态条件(时序竞态): pause 函数 调用该函数可以造成进程主动挂起,等待信号唤醒.调用该系统调用的进程将处于阻塞状态(主动放弃 cpu) 直 到有信号递达将其唤醒,等不到一直等 int paus ...

  5. Linux信号实现精确到微秒的sleep函数:通过sigsuspend函数解决时序竞态问题

    原理就是先使用定时器定时,然后再使用pause函数或者sigsuspend函数主动阻塞挂起,最终恢复现场. 如果使用pause函数的话,优点是使用简单,缺点是有可能产生时序竞态,导致进程一直阻塞下去: ...

  6. Linux系统编程(五)时序竞态

    时序竞态 产生原因 改进 总结 产生原因 #include <cstdio> #include <stdio.h> #include <sys/time.h> #i ...

  7. linux多线程时序问题,Linux时序竞态问题(sleep函数的实现)

    时序竞态是指同样的程序,多次调用运行的结果不同,这是由于争夺系统资源所造成的.比如说我们要使用alarm和pause函数来实现一个sleep的功能,那么由于alarm函数的实现过程并不是一个原子操作, ...

  8. Linux系统基础知识

    Linux系统基础知识 1.在Linux系统中,以文件方式访问设备.   2. Linux内核引导时,从文件 /etc/fstab中读取要加载的文件系统. 3. Linux文件系统中每个文件用 ino ...

  9. Linux操作系统基础知识学习

    Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目, ...

最新文章

  1. b转换成mb php_攻防世界之WEB篇,php反序列化漏洞,网络安全入门篇
  2. 深入了解Kubernetes CRD开发工具kubebuilder
  3. [转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention
  4. angularjs ng-click传参控制ng-repeat元素显示与隐藏
  5. 时间序列与R语言应用(part4)--自回归AR模型及其平稳性条件
  6. 牛客网【每日一题】3月27日 数学考试
  7. How to uninstall Internet Explorer 7
  8. 数学奥赛大神,两次以满分获IMO金牌,北大数学博士提前毕业
  9. 遇上DG挖矿病毒的处理记录
  10. 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
  11. Python天天美味(4) - isinstance判断对象类型
  12. 文件服务和对象存储服务器,对象存储与块存储服务
  13. 第006讲 多媒体页面 标签汇总
  14. 计算机恶搞bat代码,电脑重启bat代码怎么设置 电脑整人bat代码大全
  15. CART决策树算法的Python实现(注释详细)
  16. cdr2022更新24.1版CorelDRAW2022稳定版
  17. 3.路由实现(phalapi框架总结)
  18. VS2015 解决 “有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”问题
  19. gc buffer busy的优化
  20. [2021.10.30][uml]UML顺序图规范

热门文章

  1. LeetCode 963. 最小面积矩形 II
  2. 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)
  3. android monkey压力测试,Android-Monkey 压力测试
  4. java 资源锁定_如何在Java中创建时正确锁定资源
  5. 同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...
  6. 服务器上有涉密文件,涉密文件保密管理规定
  7. 【Spring Cloud中文社区】正式启动
  8. 互联网优秀架构师必读书单V2.0
  9. 参会邀请 - CCKS2020 | 2020全国知识图谱与语义计算大会(CCKS2020)明日开幕
  10. docker build 中的上下文路径