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

看板LinuxDev作者 (bendog)時間10年前 (2014/12/09 02:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《rtt2008 (rtt)》之銘言: : 小弟讀到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外面還是裡面呢? : 感謝各位大大回覆! 看你的作用,應該要加在裡面。另外注意signal 也會讓程式起來。 還有task_interrupt ible 設定完後可能在preempt 環境使thread 離開run queue 。。要特別留意。 -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.211.41 ※ 文章網址: http://www.ptt.cc/bbs/LinuxDev/M.1418062399.A.02E.html
文章代碼(AID): #1KXUe_0k (LinuxDev)
文章代碼(AID): #1KXUe_0k (LinuxDev)