linux_driver

等待队列

2019-08-25  本文已影响0人  酥酥肉

等待队列

等待队列头初始化

DECLARE_WAIT_QUEUE_HEAD(name);

wait_queue_head_t my_queue;
init_waitqueue_head(&my_queue);

等待队列

DECLARE_WAITQUEUE(wait, task);

添加移除等待队列

add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);

简单睡眠

wait_event(queue, condition)
wait_event_interruptible(queue, condition)
wait_event_timeout(queue,condition,timeout)
wait_event_interruptible_timeout(queue, condition, timeout)

queue 是等待队列头,condition 是条件,如果调用 wait_event 前 condition == 0 ,则调用 wait_event 之后,当前进程就会休眠

唤醒队列

void wake_up(wait_queue_head_t *queue);void wake_up_interruptible(wait_queue_head_t *queue);
比如你调用 wake_up 去唤醒一个使用wait_event等待队列,进入休眠的进程,唤醒之后,它会判断 condition 是否为真,如果还是假的继续睡眠。

手动睡眠

上一篇 下一篇

猜你喜欢

热点阅读