[問題] add_wait_queue在kthread的使用方式
小弟讀到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
討論串 (同標題文章)
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章