linux下的休眠与延时函数

53 篇文章 0 订阅
46 篇文章 0 订阅


Linux 下的延时函数分为用户空间延时和内核空间的延时.

用户空间:
最常用的延时函数是sleep(),但是其时间延时精确到s,不能满足很多情况下的要求。
在linux下,有一个延时函数,可以精确到us级,那就是usleep(),比如要延时一妙,usleep(1000000);

内核空间:
udelay(int n);  延时n微秒
mdelay(int n);  延时n毫秒
ndelay(int n);  延时n纳秒

头文件:include/asm-???/delay.h中定义了udelay(),而include/linux/delay.h中定义了mdelay和ndelay.

 

linux C函数:
void usleep(int micro_seconds);
把进程挂起一段时间, 单位是微秒(百万分之一秒);
头文件unistd.h
==============================================================
对于内核空间的延时函数
void ndelay(unsigned long nsecs);

void udelay(unsigned long usecs);//udelay一般适用于一个比较小的delay,如果你填的数大于2000,系统会认为你这个是一个错误的delay函数,因此如果需要2ms以上的delay需要使用mdelay函数。

void mdelay(unsigned long msecs);


这3个函数的延时原理是忙等待,也就是说在延时的过程中并没有放弃cpu,根据cpu的频率进行一定次数的循环。同时这三个函数的延时是准确的。

在内核中对于毫秒级以上的延时,最好不要直接使用mdelay函数,这将无谓的浪费cpu的资源,对于毫秒级以上的延时,内核提供了下列函数:

void msleep(unsigned int millisecs);

unsigned long msleep_interruptible(unsigned int milosecs);

void ssleep(unsigned int seconds);
这三个函数时休眠函数,不会忙等待

注:受系统HZ以及进程调度的影响,msleep类似函数的精度是有限的。msleep是休眠函数,它不涉及忙等待.你如果是msleep(10),那实际上延迟的时间,大部分时候是要多于10ms的,是个不定的时间

值.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值