Chinaunix

标题: mdelay,udelay [打印本页]

作者: zlinux123456    时间: 2007-09-04 22:12
标题: mdelay,udelay
我在内核中启用了两个线程;

然后两个线程都采用无限循环如下:

while(1)
{

     udelay(100);
     printk("...........\n");

}

发现CUP一直被占用,从来没有机会执行其它东西.

我想问一下,是不是在内核中延时,都不会释放CPU,如用udelay,mdelay,msleep等
作者: zx_wing    时间: 2007-09-04 22:57
原帖由 zlinux123456 于 2007-9-4 22:12 发表
我在内核中启用了两个线程;

然后两个线程都采用无限循环如下:

while(1)
{

     udelay(100);
     printk("...........\n");

}

发现CUP一直被占用,从来没有机会执行其它东西.

我想问一 ...

这些都是短延迟的时候使用的函数,都是忙等待,你不应该这样使用它们。要达到延时并让出cpu的方法有很多,例如:

  1. unsigned long delay = jiffies + 1000;
  2. while(time_before(jiffies, delay))
  3.        cond_resched();
复制代码

更简单的是使用schedule_timeout()函数。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2