linux 中的sleep相关函数

以下sleep函数都是认当前线程进入等待队列,跟踪代码后发现最终都是通过调用以两条语句来实现线程等等的。

        __set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout(timeout);

1、msleep()
2、msleep_interruptible()

3、sleep_on(wait_queue_head_t *q)
4、sleep_on_timeout(wait_queue_head_t *q, long timeout)
5、interruptible_sleep_on(wait_queue_head_t *q)
6、interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)

msleep()
    schedule_timeout_uninterruptible()
        __set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout(timeout);
            setup_timer_on_stack();
            schedule();
            destroy_timer_on_stack();


msleep_interruptible()
    while (timeout && !signal_pending(current))
        timeout = schedule_timeout_interruptible(timeout);
            __set_current_state(TASK_INTERRUPTIBLE);
            schedule_timeout(timeout);




sleep_on(wait_queue_head_t *q)
    sleep_on_common(q, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
        wait_queue_t wait;
        init_waitqueue_entry(&wait, current);
        __set_current_state(state);
        __add_wait_queue(q, &wait);
        timeout = schedule_timeout(timeout);
        __remove_wait_queue(q, &wait);



sleep_on_timeout(wait_queue_head_t *q, long timeout)
    sleep_on_common(q, TASK_UNINTERRUPTIBLE, timeout);


interruptible_sleep_on(wait_queue_head_t *q)
    sleep_on_common(q, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);


interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)
    return sleep_on_common(q, TASK_INTERRUPTIBLE, timeout);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值