wait_event_interruptible(wq, condition); wait_event_interruptible_timeout 进程进入休眠状态(TASK_INTERRUPTIBLE),直到条件评估为真或接收到信号或超时。每次唤醒等待队列wq时,都会检查该条件。 如果超时后条件评估为false,则返回0;如果超时后情况评估为true,则返回1;如果超时前情况评估为true,则返回剩余的jiffies(至...
返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
1. 原型 #define wait_event_interruptible_timeout(wq_head, condition, timeout) \ ({ \ long __ret = timeout; \ might_sleep(); \ if (!___wait_cond_timeout(condition)) \ __ret = __wait_event_interruptible_timeout(wq_head, \ condition, timeout); \ __ret; \ }) 2. 使用场景 ...
wait_event_timeout(wait_queue,condition,timeout); 这个用法表示等待条件condition成立,直到超过指定的超时时间timeout。 •示例2:等待事件直到超时或者被唤醒 wait_event_interruptible_timeout(wait_queue,condition,timeout); 与示例1类似,但是如果在等待期间被接收到信号,函数将立即返回。 •示例3:循环等待事件...
wait_event_interruptible_timeout(wq, condition, timeout); 当前入队的任务(TASK_INTERRUPTIBLE)唤醒条件比wait_event_interruptible多了个超时机制。 2.2.6 wait_event_killable wait_event_killable(wq,condition); 当前入队的任务(TASK_KILLABLE)唤醒条件同wait_event_interruptible。
阻塞。wait_event()和wait_event_interruptible()的区别在于后者可以被信号打断,而前者不能。加上 _timeout后的宏意味着阻塞等待的超时时间,以jiffy为单位,在第3个参数的timeout到达时,不论condition 是否满足,均返回。 函数原型: #define wait_event_interruptible(wq, condition) \ ...
wait_event_timeout:不可中断睡眠,当超过指定的 timeout(单位是 jiffies)时间,不管有没有 wake up,还是条件没满足,都要唤醒进程,此时返回的是 0。在 timeout 时间内条件满足返回值为 timeout 或者 1; wait_event_interruptible:可被信号中断的睡眠,被信号打断唤醒时,返回负值 -ERESTARTSYS;wake up 时,条件满足...
wait_event(queue,condition);将当前进程进程的状态设置为 TASK_UNINTERRUPTIBLE ,然后schedule()wait_event_interruptible(queue,condition);TASK_INTERRUPTIBLE ,然后schedule()wait_event_timeout(queue,condition,timeout);TASK_UNINTERRUPTIBLE ,然后schedule_timeout()wait_event_interruptible_timeout(queue,condition,...
{//传入的时间>0if(os::sleep(thread,millis,true)==OS_INTRPT){//睡眠醒过来后,发现发生了中断,抛出中断异常THROW_MSG(vmSymbols::java_lang_InterruptedException(),"sleep interrupted");}}thread->osthread()->set_state(old_state);}if(event.should_commit()){event.set_time(millis);event.commit(...