[问题] add_wait_queue在kthread的使用方式

楼主: rtt2008 (rtt)   2014-11-12 14:07:07
小弟读到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外面还是里面呢?
感谢各位大大回复!

Links booklink

Contact Us: admin [ a t ] ucptt.com