mysleep 的两种实现
来源:互联网 发布:python股票大数据分析 编辑:程序博客网 时间:2024/05/17 07:19
一、
#include<stdio.h> #include<signal.h> #include<unistd.h> void myhandler(int sig) //句柄函数什么也不做{} int mysleep(int timeout) { struct sigaction act,oact; act.sa_handler = myhandler; sigemptyset(&act.sa_mask);//信号集的初始化 act.sa_flags = 0; sigaction(SIGALRM,&act,&oact);//注册信号处理函数 alarm(timeout);//设置闹钟 pause();//将自己挂起直到有信号递达 int ret = alarm(0);//取消闹钟 sigaction(SIGALRM,&oact,NULL);//恢复对SIGALRM信号的处理动作 return ret; } int main() { while(1) { mysleep(2); printf("use mysleep!\n"); } return 0; }
二、避免竞态条件的mysleep
#include<stdio.h> #include<signal.h> void myhandler(int sig) { //printf("get a sig:%d\n",sig); } struct sigaction act,oact; sigset_t newmask,oldmask,suspmask;//设置信号集 act.sa_handler = myhandler; sigemptyset(&act.sa_mask);//信号集的初始化 act.sa_flags = 0; sigaction(SIGALRM,&act,&oact);//读取和修改与SIGALRM信号相关联的处理动作 sigemptyset(&newmask);//初始化信号集 sigaddset(&newmask,SIGALRM);//为信号集添加SIGALRM信号 alarm(timeout);//设置闹钟 sigdelset(&oldmask,SIGALRM);//从信号集oldmask中删除SIGALRM信号 sigsuspend(&oldmask);//将当前进程的信号屏蔽字设为oldmask,在进程接受到信号之前,进程会挂起,当捕捉一个信号,首先执行信号处理程序,然后从sigsuspend返回,最后将信号屏蔽字恢复为调用sigsuspend之前的值 //pause();//将自己挂起直到有信号递达 int ret = alarm(0);//取消闹钟 sigaction(SIGALRM,&oact,NULL);//恢复对SIGALRM信号的处理动作 return ret; } int main() { while(1) { mysleep(2); printf("use mysleep!\n"); } return 0; }
三、对比两种方法:
阅读全文
0 0
- mysleep 的两种实现
- mysleep的实现
- Linux下mysleep的实现
- 【Linux】信号的基础知识&mysleep的实现
- 【Linux】sleep函数的简单实现--mysleep
- linux编程之mysleep的实现
- linux mysleep实现
- 实现sleep-mysleep
- 实现睡眠函数mysleep
- mysleep与竞态条件下的mysleep
- Linux下的mysleep
- mysleep
- mysleep
- 实验五:实现mysleep函数
- Linux C 实现mysleep数
- 【Linux】实现睡眠函数mysleep
- 普通版本mysleep和规避竞态条件的mysleep
- mysleep()的多个版本实现及竟态条件的认知
- Android SQLite使用
- ThreadLocal源码及存在的内存泄漏分析
- 数据库连接出现乱码问题
- servlet的异步处理支持
- Swift: Xcode 真机调试
- mysleep 的两种实现
- 困难得有点不正常
- 为什么一个网站的资源会存在于多个域名中?
- 设计模式之模板模式
- 草根学Python(一)第一个Python程序
- [leetcode]: 624. Maximum Distance in Arrays
- Java:java.util.concurrent.atomic
- 凸优化学习笔记
- CocoaPod 使用指南