[問題] add_wait_queue在kthread的使用方式

看板LinuxDev作者 (rtt)時間10年前 (2014/11/12 14:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
小弟讀到ldd3關於wait_queue的sample ssize_t sleepy_read (struct file *filp, char _ _user *buf, size_t count, loff_t *pos) { wait_event_interruptible(wq, flag != 0); flag = 0; return 0; } ssize_t sleepy_write (struct file *filp, const char _ _user *buf, size_t count, loff_t *pos) { flag = 1; wake_up_interruptible(&wq); return count; } 我現在將"sleepy_read" 用kernel thread替換 每次呼叫sleepy_write就會wake_up wait_queue去讀資料 static int Mykthread(void *arg) { DECLARE_WAITQUEUE(wait, current); add_wait_queue(&waitqueue, &wait); while (1) { set_current_state(TASK_INTERRUPTIBLE); if (kthread_should_stop()) break; wait_event_interruptible(waitqueue, flag != 0); flag = 0; schedule_timeout(10 * HZ); //sleep set_current_state(TASK_RUNNING); // read data } remove_wait_queue(&wee_wait, &wait); return 0; } 請問這裡add_wait_queue要放在while-loop外面還是裡面呢? 感謝各位大大回覆! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.3.236 ※ 文章網址: http://www.ptt.cc/bbs/LinuxDev/M.1415772430.A.5FB.html
文章代碼(AID): #1KOlaENx (LinuxDev)
文章代碼(AID): #1KOlaENx (LinuxDev)