操作系统 — 竞争条件
竞争条件
/*************************************************************************> File Name: fork.c> Author: ma6174> Mail: ma6174@163.com > Created Time: Thu 18 Jan 2018 09:54:34 PM PST************************************************************************/#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<errno.h>int main()
{pid_t pid;if((pid = fork()) < 0)perror("fork error");else if(pid == 0){if((pid = fork()) < 0)perror("fork error");else if(pid > 0)exit(0);sleep(2);printf("second child , parent pid = %d\n",(int)getppid());exit(0);}if(waitpid(pid,NULL,0) != pid)perror("waitpid error\n");exit(0);
}
最后来看一下我们的结果是什么:
while(getppid() != 1)
sleep(1);
这种形式的循环称为轮询,他的问题是浪费了cpu时间,因为调用者每隔一秒都被唤醒,然后进行条件测试.
优化版本的mysleep
sigsuspend函数
#include <signal.h>int sigsuspend(const sigset_t *mask);
/*************************************************************************> File Name: mysleep2.c> Author: ma6174> Mail: ma6174@163.com > Created Time: Thu 18 Jan 2018 11:29:18 PM PST************************************************************************/#include<stdio.h>
#include<signal.h>
#include<unistd.h>void sig_alrm(int sig)
{//DO SOMETHING
}unsigned int mysleep(unsigned int nsecs)
{struct sigaction new,old;sigset_t newmask,oldmask,suspendmask;unsigned int unslept = 0;new.sa_handler = sig_alrm;sigemptyset(&new.sa_mask);new.sa_flags = 0;sigaction(SIGALRM,&new,&old);sigemptyset(&newmask);sigaddset(&newmask,SIGALRM);sigprocmask(SIG_BLOCK,&newmask,&oldmask);alarm(nsecs);suspendmask = oldmask;sigdelset(&suspendmask,SIGALRM);sigsuspend(&suspendmask);unslept = alarm(0);sigaction(SIGALRM,&old,NULL);sigprocmask(SIG_BLOCK,&oldmask,NULL);return unslept;
}int main()
{while(1){mysleep(1);printf("1 seconds passed\n");}
}
操作系统 — 竞争条件相关推荐
- rust键位失灵_用Rust写操作系统(四)——竞争条件与死锁
一.概要说明 当多个任务访问同一个资源(数据)是就会引发竞争条件问题,这不仅在进程间会出现,在操作系统和进程间也会出现.由竞争条件引发的问题很难复现和调试,这也是其最困难的地方.本实验的目的在于了解竞 ...
- 操作系统原理实验(四)深渊:竞争条件与死锁(硬件中断)
硬件中断 中断控制器 启动中断 处理定时器中断 死锁 竞争条件 HLT指令 键盘输入 中断控制器 中断提供了一种从附加硬件设备通知CPU的方法.这个英特尔8259是1976年推出的可编程中断控制器(P ...
- 【操作系统】竞争条件与临界区
Race Condition 多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件(Race Condition). 为了防止上述竞争条件,需要确保一段时间内只有一个进程能操 ...
- Linux Kernel ‘install_user_keyrings()’竞争条件漏洞
漏洞名称: Linux Kernel 'install_user_keyrings()'竞争条件漏洞 CNNVD编号: CNNVD-201303-141 发布时间: 2013-03-11 更新时间: ...
- 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
在网络和应用程序渗透测试期间,SQL Server 全局临时表通常不是关注的焦点.然而,它们被开发人员周期性地不安全地用来存储敏感数据和代码块,这些数据和代码块可以被非特权用户访问.在本博客中,我将介 ...
- 竞争条件(race condition)
在一些操作系统中,协作的进程可能共享一些彼此都能读写的公用存储区.这个公用存储区可能在内存中(可能是在内核数据结构中),也可能是一个共享文件.这里共享存储区的位置并不影响通信的本质及其带来的问题.为了 ...
- 临界区,互斥,竞争条件
临界区,互斥,竞争条件 公共资源 可以是公共内存.公共文件.公共硬件等,总之是被所有任务共享的一套资源. 临界区 程序要想使用某些资源,必然通过一些指令去访问这些资源,若多个任务都访问同一公共资源,那 ...
- linux内核远程漏洞,CVE-2019-11815:Linux内核竞争条件漏洞导致远程代码执行
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版的计算机设备,如果内核版本小于5.0.8的话,将有可能受到一 ...
- linux内核竞争条件漏洞,Linux内核竞争条件漏洞-导致远程代码执行
原标题: Linux内核竞争条件漏洞-导致远程代码执行 导读*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 运行了Linux发行版 ...
最新文章
- 位操作-按位与之如何求二进制数的1个数
- AI教父争夺秘史:百度2.88亿天价求才,因中国身份惜败谷歌
- HDU1007 查找平面最近点对
- 【转】异步编程:.NET 4.5 基于任务的异步编程模型(TAP)
- oracle执行sql痕迹,Oracle 查询刚执行的SQL
- ★LeetCode(17)——电话号码的字母组合(JavaScript)
- IBM的人工智能“沃森”首次确诊罕见白血病,只用了10分钟!
- Java常用日志框架介绍(转载)
- Java中 … 三个点是什么意思?
- (商品评价页)商品星级评分html+css+js
- (谷歌)Chrome浏览器添加扩展程序白名单
- mysql datasource property_spring配置datasource三种方式
- 音视频流媒体————基本概念
- csp怎么给线条描边,插画师要失业了?还在纠结阴影怎么画?CSP软件能直接自动生成...
- cv2-特征点匹配(bf、FLANN)
- csv文件导入Mysql
- 微信可以打开淘宝链接,淘宝也在测试微信支付,但真的都很别扭
- 利用Github免费搭建个人主页(个人博客)
- mysql建表及DML语句
- 微信公众号开通步骤详解