等待队列是一种实现阻塞和唤醒的内核机制,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。可以实现线程的软等待,当符合条件时从另一个线程实现软唤醒。等待队列实现了在事件上的条件等待,希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制权。因此。等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。
使用方法:
1.定义等待队列
static DECLARE_WAIT_QUEUE_HEAD(wq)
2.定义唤醒标志(注意:标志要用作全局变量,以供不同函数的统一使用)
static int w_flag = 0; //当且仅当w_flag为真,才唤醒队列
3.在需要阻塞的地方调用函数,使当前线程进入睡眠
wait_event_interruptible(wq,w_flag )
wait_event_interruptible(wq,w_flag )函数会根据w_flag条件的真假判断,若是假,则当前的线程会进入休眠状态
4.在另一个线程(或当前线程的中断函数),先w_flag=1;再wake_up_interruptible(&wq)函数,即可唤醒
w_flag=1 //设置条件为真
wake_up_interruptible(&wq) //会再次判断条件的真假,若是真,则退出休眠状态
//来源
Linux使用wake_up_interruptible()唤醒注册到等待队列上的进程 - 静之深 - 博客园 (cnblogs.com)