Linux sleep()原理重现

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
void handler(int signo)
{
}

// sigsuspend()函数的功能就是-“解除信号屏蔽”-“挂起进程等待信号”-“执行信号处理函数”- “出错返回”。
// 所以sigsuspend()函数函数同pause()函数一样只有出错返回值。在对程序时序要求比较严格的程序中一般使用sigsuspend()函数

int mysleep(int time)
{
// 当前进程 屏蔽SIGALRM信号
sigset_t set, oset;
sigemptyset(&set);
sigaddset(&set, SIGALRM);
sigprocmask(SIG_BLOCK, &set, &oset); // 设置set为当前进程的信号集,保存进程以前的信号集合oset

// 设置SIGALRM信号的处理方式
struct sigaction act;
struct sigaction oact;
act.sa_handler = handler;
act.sa_mask = set;
act.sa_flags = 0; 
sigaction(SIGALRM, &act, &oact);  // oact,保存SIGALRM信号原来的处理方式


// 闹钟函数,在进程中设置一个定时器,当定时器指定的时间到时,它向进程发送SIGALRM信号
alarm(time);


sigset_t susmask = oset;
sigdelset(&susmask, SIGALRM);

// “解除信号屏蔽” - “挂起进程等待信号” - “执行信号处理函数” - “出错返回”
sigsuspend(&susmask);

int _time = alarm(0);

// 重置进程对SIGALRM信号原来的处理方式
sigaction(SIGALRM, &oact, NULL);

// 重置进程原来的信号集
sigprocmask(SIG_BLOCK, &oset, NULL);


return _time;

}

int main()
{
while (1)
{
printf(“hello yingying\n”);
mysleep(2);
}

return 0;

}

参考:
https://www.jb51.net/article/112394.htm

数据库:事务特性:acid,如何实现acid,
https://blog.csdn.net/hxpjava1/article/details/79409395
http://blog.jobbole.com/108569/
https://blog.csdn.net/javaMare/article/details/85163824

https://www.cnblogs.com/AndyAo/p/8228099.html

https://www.w3cschool.cn/architectroad/architectroad-two-phase-commit.html
http://oceanbase.org.cn/?p=195
https://weibo.com/ttarticle/p/show?id=2309403965965003062676

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值