词条 | 等待队列 |
释义 | 编写Linux驱动程序的一个问题是"到底如何使用等待队列呢" 等待队列很容易使用, 尽管它的设计很是微妙, 但你不需要知道它的内部细节, 处理等待队列的最佳方式就是依照如下操作: 1. 声明一个struct wait_queue * 变量. 你需要为每一个可以让进程睡眠的事件预备这样一个变量. 这就是我建议你放在描述硬件特性数据结构中的数据项. 2. 将该变量的指针作为参数传递给不同的sleep_on和wake_up函数. 这相当容易. 例如, 让我们想象一下, 当进程读你的设备时, 你要让这个进程睡眠, 然后在某人向设备写数据后唤醒这个进程. 下面的代码就可以完成这些工作: struct wait_queue *wq= NULL; read_write_t sleepy_read(struct inode *inode, struct file *flip, char *buf, count_t count) { printk(KERN_DEBUG "process %i (%s) going to sleep\", current->pid, current->comm); interruptible_sleep_on(&wq); printk(KERN_DEBUG "awoken %i (%s)\", current->pid, current->comm); return 0; } read_write_t sleepy_write(struct inode *inode, struct file *flip, char *buf, count_t count) { printk(KERN_DEBUG "process %i (%s) awakening the readers\", current->pid, current->comm); wake_up_interruptible(&wq); return count; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。