当前位置: 技术问答>linux和unix
关于linux的定时器问题
来源: 互联网 发布时间:2017-02-02
本文导语: 主线程等在一个buffer的信号量上(拿到表示buffer有了可用数据),如果信号量拿到后,会去等一个互斥量进行buffer的访问。 问题是,主线程还需要一个定时功能。根据现在的设计,我想通过一个alram信号完成此种功能。就是...
主线程等在一个buffer的信号量上(拿到表示buffer有了可用数据),如果信号量拿到后,会去等一个互斥量进行buffer的访问。
问题是,主线程还需要一个定时功能。根据现在的设计,我想通过一个alram信号完成此种功能。就是用alram(1),alarm处理函数,向buffer中放入定时消息到的数据,并post 信号量。
现在的问题:
1)如果主线程一直处在信号量等待状态(应该是在内核态),这时信号是不是一直不会激发?
2)如果信号激发,信号处理函数是以一个独立的临时线程来运行吗?否则前面的设计有死锁危险,如果主线程拿了buffer的互斥量,而信号处理函数去等这个互斥量。
|
如果主线程占有了信号量和互斥量,那么它可以立即访问buffer,此时,无论alarm处理函数有没有刷新定时消息数据,主线程访问后,应该立即释放互斥量和信号量,这样alarm就可以访问buffer,而不死锁。