关于linux的定时器问题

orasy 2012-02-08 03:00:26



主线程等在一个buffer的信号量上(拿到表示buffer有了可用数据),如果信号量拿到后,会去等一个互斥量进行buffer的访问。

问题是,主线程还需要一个定时功能。根据现在的设计,我想通过一个alram信号完成此种功能。就是用alram(1),alarm处理函数,向buffer中放入定时消息到的数据,并post 信号量。

现在的问题:

1)如果主线程一直处在信号量等待状态(应该是在内核态),这时信号是不是一直不会激发?
2)如果信号激发,信号处理函数是以一个独立的临时线程来运行吗?否则前面的设计有死锁危险,如果主线程拿了buffer的互斥量,而信号处理函数去等这个互斥量。
...全文
133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
orasy 2012-02-09
  • 打赏
  • 举报
回复
昨天看了多线程下的信号处理,有结果了。

对于多线程条件下,信号处理函数可以打断随机的线程执行序列。在我的例子中,主线程要访问一个互斥量;信号处理函数也要访问同一个互斥量,如果信号中断的是主线程就有死锁风险。
bjtea 2012-02-08
  • 打赏
  • 举报
回复
如果主线程占有了信号量和互斥量,那么它可以立即访问buffer,此时,无论alarm处理函数有没有刷新定时消息数据,主线程访问后,应该立即释放互斥量和信号量,这样alarm就可以访问buffer,而不死锁。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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