当前位置: 技术问答>linux和unix
驱动多线程中频繁使用mdelay会对系统造成问题吗?
来源: 互联网 发布时间:2017-01-30
本文导语: 驱动中开一个线程一直在运转,然后每隔100us(使用udelay延时),就操作一次硬件,那么这个100us会受到应用层阻塞线程或者 其他阻塞的影响么? | 驱动开的是内核线程 跟普通进程一样是可...
驱动中开一个线程一直在运转,然后每隔100us(使用udelay延时),就操作一次硬件,那么这个100us会受到应用层阻塞线程或者 其他阻塞的影响么?
|
驱动开的是内核线程 跟普通进程一样是可以调度的
udelay是靠死循环实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序
100us是小于进程可能的最小时间片的 (HZ=1000时,1ms才产生一个时钟中断,假设时间片为1个jiffes,1ms才可能发生进程切换,轮到你的内核线程)
所以这是靠不住的,会受到其他阻塞进程的影响
你需要使用内核高精度定时器 ,一般的内核定时器都不能达到us级
这种时间级别的操作,应该都有装用的硬件控制器来做
udelay是靠死循环实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序
100us是小于进程可能的最小时间片的 (HZ=1000时,1ms才产生一个时钟中断,假设时间片为1个jiffes,1ms才可能发生进程切换,轮到你的内核线程)
所以这是靠不住的,会受到其他阻塞进程的影响
你需要使用内核高精度定时器 ,一般的内核定时器都不能达到us级
这种时间级别的操作,应该都有装用的硬件控制器来做