返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
__ret = __wait_event_interruptible_timeout(wq_head, \ condition, timeout); \ __ret; \ }) 2. 使用场景 睡眠到条件满足或者超时退出睡眠状态 3. 支持可中断的睡眠,意味着可以发送信号给睡眠的进程,进程会对信号进行响应 4. 返回值解析 4.1 当返回值大于0时,表示返回的是剩余的时间(以jiffy为单位),...
wait_event_interruptible_out的返回值,函数原型:wait_event_interruptible_timeout(wq,condition,timeout)*函数作用:~睡眠~,直到condition为真,或timeout超时;*@wq:要等待的等待队列*@condition:等待事件发生的条件(一个C表达式)*@timeout:超时时间程序是用来睡眠的
wait_event_interruptible(wq, condition); 返回值-ERESTARTSYS表示当前入队的任务被信号中断,为0表示是condition为true导致任务被唤醒。 5 wait_event_interruptible_timeout 当前入队的任务(TASK_INTERRUPTIBLE)唤醒条件比wait_event_interruptible多了个超时机制。 wait_event_interru...
当条件不满足时,该函数会进入494行的__wait_event_interruptible_timeout宏,进一步调用___wait_event。这些宏在预编译阶段展开,确保参数表达式在进入时已解析。唤醒操作的实现有多种方式,如直接通过wake_up_interruptible或autoremove_wake_function等函数。关于唤醒和调度的问题,如果在超时后condition变为...
[函数返回0表示timeout用完后被唤醒;返回整数表示timeout未用完时就被唤醒,此时可能接收到了一个信号量] wait_event系列函数(作用:等待事件,置于休眠。区别从字面意思即可看出): wait_event(queue, conditon);wait_event_interruptible(queue, condition);wait_event_timeout(queue, condition, timeout);wait_event...
timeout=wait_event_interruptible_timeout(wait_queue,condition,timeout); } 这个用法会进行循环等待,直到超时为止。如果在等待期间被唤醒,将重新进入等待。 •示例4:检测返回值 ret=wait_event_timeout(wait_queue,condition,timeout); if(ret==0){ //等待超时 }else{ //条件满足或者被唤醒 } 这个用法在...
___wait_event(wq_head, ___wait_cond_timeout(condition), \ TASK_UNINTERRUPTIBLE, 0, timeout, \ __ret = schedule_timeout(__ret)) 4) #define wait_event_interruptible_exclusive(wq, condition) \ ({ \ int __ret = 0; \ might_sleep(); \ ...
wait_event_interruptible(wq, condition) wake_up_interruptible(x) wq:等待队列,当后面的条件不成立则进程进入休眠 condition:判断条件 ,0或非0值 x: 等待队列,要唤醒的等待队列,即唤醒对应的进程 当函数中调用wait_event_interruptible后,如果条件不成立,就会一直卡在这里。不会往下执行。反复检查condition是否成立...