Timer 超时等待资源及处理方法

Timer使用的需要注意的地方及解决方法

 

1.Timer超时函数,在处理的时候是通过软中断实现,即处理函数是在中断上下文去实现的,而中断上下文:第一:不充许sleep; 第二不允许schedule. 如果有类似的操作,都将可能发生错误及crash问题。

2.有时候一些功能需要在超时函数中做一个sleep或者等待一些信号号或者一些资源,那么就需要一种解决方法,去处理这些情况。

3.处理这个情况的方法:第一:设置一个flag,然后用一个线程去poll,这样来做,显然是比较耗费资源的;第二: 满足其资源,进而不在处理函数中等待资源,显然这样很难实现及代价很大。第三种:用schedule_work去实现,这种情况比较好,可以节省poll资源和持有信号量,又可以去sleep或schedule.

 

Schedule_work:

1、定义structwork_struct wq_queue;

2、初始化INIT_WORK(&wq_queue,do_handle_queuework);

3、调用方法:schedule_work(&wq_queue);

Note:调用完毕后系统会释放此函数,所以如果想再次执行的话,就再次调用schedule_work()即可。可以在do_handle_queuework中做任何事件,只要逻辑没问题,什么都可以。

4.还有一个schedule_delayed_work(&wq_queue,delay_jiffies),就是延迟jiffies*N去处理。在linux中的底半部处理,这就是其中的一种处理方法。把工作推后,交给一个线程,而这个线程总是工作在进种上下文,因此,这可以很方便的持有信号量,也可以睡眠。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值