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

楼主: bendog (bendog)   2014-12-09 02:13:18
※ 引述《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 。。要特别留意。

Links booklink

Contact Us: admin [ a t ] ucptt.com