wait_event()和wait_event_interruptible()的介绍

Posted 代码改变世界ctw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wait_event()和wait_event_interruptible()的介绍相关的知识,希望对你有一定的参考价值。

我们先写下该函数的含义:先判断一下condition条件,如果条件不成立,则将当前进程挂在等待队列中,如果条件成立,则唤醒等待队列.

在kernel-4.14/include/linux/wait.h中,有着大量的wait_event类的API函数,

然后我们挑选出一个常用的来介绍:

wait_event(wq_head, condition)

  • condition = 0 ///cpu继续休眠,其实就是将cpu schedule()出去,当前进程挂在等待队列中
  • condition = 1 ///唤醒工作队列

接着我们对上述的sub name进行介绍:

  • _timeout: 如果带了_timeout,那么在检查condition条件时,如果不成立,则会等待timeout时间后,再检查一次.
  • _interruptible : 此时cpu已经schedule()出去,这时来个系统级的中断,是可以唤醒这个等待队列的

下面我们选取wait_event_interruptible()和wait_event_interruptible_timeout()来介绍其实现原理:

 

以上是关于wait_event()和wait_event_interruptible()的介绍的主要内容,如果未能解决你的问题,请参考以下文章

等待队列_睡眠和唤醒

串口驱动

Linux内核中等待队列的几种用法

关于linux哪些能调用schedule或者等待事件的问题

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等