等待队列常用于异步通知和阻塞式访问。如果进程需要等待某些条件发生才能继续,则可以使用等待队列机制。在Linux内核中通常使用等待队列来实现阻塞式访问。
●初始化一个等待队列头
void init_waitqueue_head(wait_queue_head_t*q);
●等待事件发生的函数
wait_event(wq,condition)//不可中断的等待
wait_event_interruptible(wq,condition)//可中断的等待
wait_event_timeout(wq,condition,timeout)//带超时返回的等待
wait_event_interruptible_timeout(wq,condition,timeout)//可中断并超时返回的等待
●唤醒等待队列(www.xing528.com)
wake_up(wait_queue_head_t*q);//唤醒所有等待q的进程
wake_up_interruptible(wait_queue_head_t*q);//只唤醒执行可中断休眠的进程
●加入或退出等待队列
void add_wait_queue(wait_queue_head_t*q,wait_queue_t*wait)
void add_wait_queue_exclusive(wait_queue_head_t*q,wait_queue_t*wait)
void remove_wait_queue(wait_queue_head_t*q,wait_queue_t*wait)
加入等待队列的线程将等待唤醒(wake_up)。阻塞式字符驱动程序一般在读函数中等待,并在中断或内核线程中使用wake_up函数唤醒等待队列。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。