APUE10.19节sleep函数的POSIX.1实现

um_java 2012-04-10 08:49:27
APUE10.19节中有一个遵循POSIX.1的sleep函数的实现,设置了SIGALRM的信号处理程序以后,先阻塞SIGALRM信号,中间通过调用sigsuspend函数等待SIGALRM信号,然后再解除阻塞。
想了好久不知道为什么要先阻塞再解除阻塞,不能直接调用sigsuspend函数吗?
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2012-04-12
  • 打赏
  • 举报
回复
按我的理解,根本上还是担心SIGALRM信号在sigsuspend之前发生
这样的话,这个实现就会阻塞在sigsuspend上了
um_java 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

参考 为什么sigsuspend要与sigprocmask配合使用?
[/Quote]
快来帮忙回答问题。。靠你了
um_java 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

参考 为什么sigsuspend要与sigprocmask配合使用?
[/Quote]
你给的链接我看懂了,可是换到sleep函数实现,不阻塞SIGALRM信号好像也不会产生问题啊?
实现代码里:
//
sigprocmask()

alarm(nsec);

//
sigsuspend();
我省略了一些代码,大致格式是这个样子,如果不调用sigprocmask,可以随时产生SIGALRM信号也没什么问题吧。
justkk 2012-04-10
  • 打赏
  • 举报
回复

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧