voidadd_wait_queue_exclusive(wait_queue_head_t*q,wait_queue_t*wait){unsignedlongflags;wait->flags|=WQ_FLAG_EXCLUSIVE;spin_lock_irqsave(&q->lock,flags);__add_wait_queue_tail(q,wait);spin_unlock_irqrestore(&q->lock,flags);}EXPORT_SYMBOL(add_wait_queue_exclusive); 该函数也和add_wait_q...
struct wait_queue_head_t wq; /* global variable */ DECLARE_WAIT_QUEUE_HEAD (wq); while ( is_full ){ interruptible_sleep_on( &wq ); } write_to_buffer(); interruptible_sleep_on( &wq ) 是用来将目前的 process,也就是要求写资料到buffer 的 process放到 wq 这个 wait_queue 里。在 interru...
其中0是非互斥进程,WQ_FLAG_EXCLUSIVE(0x01)是互斥进程。等待队列(wait_queue_t)和等待对列头(wait_queue_head_t)的区别是等待队列是等待队列头的成员。也就是说等待队列头的task_list域链接的成员就是等待队列类型的(wait_queue_t)。 2、(从等待队列头中)添加/移出等待队列: (1) add_wait_queue()函数: ...