请输入您要查询的百科知识:

 

词条 等待队列
释义

编写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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/15 19:33:25