等待佇列

"ux驅動程式的一個問題是"到底如何使用等待佇列呢" 等待佇列很容易使用

編寫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\n", current->pid, current->comm);
interruptible_sleep_on(&wq);
printk(KERN_DEBUG "awoken %i (%s)\n", 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\n", current->pid, current->comm);
wake_up_interruptible(&wq);
return count;
}

相關詞條

相關搜尋

熱門詞條

聯絡我們