函数原型:wait_event_interruptible_timeout(wq,condition, timeout)*函数作用:~睡眠~,直到condition为真,或timeout超时;*@wq: 要等待的等待队列*@condition: 等待事件发生的条件(一个C表达式 )*@timeout: 超时时间 程序是用来睡眠的(TASK_INTERRUPTIBLE状态下),直到@condition为真,或者收到一个信号。 每次等待队...
返回-ERESTARTSYS:意味着在等待过程中,被信号打断了(因为该函数休眠的状态是TASK_INTERRUPTIBLE,可以被信号中断),用户可以根据这个返回值做进一步的处理,比如可以重新调用wait_event_interruptible_timeout进入休眠等待。 492行用于debug,wait_event_interruptible_timeout在condition不为true时会休眠,因此不能在原子上下文中调...
1)wait_event_interruptible_timeout是把调用这个函数的进程链入到一个list中,并且 最重要的结构体是wait_queue_head_t,这个结构体包含两个成员变量:spin_lock lock 和 struct list_head task_list 可知这个结构体的目的其实也是比较简单的:就是把一个进程插入到一个队列中去! 函数层层递进,其实调用的是 wait_e...
Linux内核的wait_event_interruptible_timeout机制详解 在Linux内核编程中,wait_event_interruptible_timeout是处理异步事件等待的核心函数,它采用宏定义实现,其基本功能是让线程在condition条件满足或超时timeout后唤醒。重要的是,它在492行的debug处理中,避免在原子上下文中的使用,防止潜在问题的产生,通过...
1. wait_event_interrupable()函数 ,使得进程处于可中断(TASK_INTERRUPTIBLE)状态,从而睡眠进程可以通过接收信号被唤醒; 2. wait_event_timeout()函数,等待满足指定的条件,但是如果等待时间超过指定的超时限制则停止睡眠,可以防止进程永远睡眠; 3. wait_event_interruptible_timeout() 使得进程睡眠,不但可以通过接收信...
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。
当前入队的任务(TASK_INTERRUPTIBLE)唤醒条件比wait_event_interruptible多了个超时机制。 wait_event_interruptible_timeout(wq, condition, timeout); 6 wait_event_killable 当前入队的任务(TASK_KILLABLE)唤醒条件同wait_event_interruptible。
wait_event_timeout()宏: 也与wait_event()类似.不过如果所给的睡眠时间为负数则立即返回.如果在睡眠期间被唤醒,且condition为真则返回剩余的睡眠时间,否则继续睡眠直到到达或超过给定的睡眠时间,然后返回0. wait_event_interruptible_timeout()宏 与wait_event_timeout()类似,不过如果在睡眠期间被信号打断则返回ERE...
根据wait_event_interruptible 的宏定义知: 1) 条件condition为真时调用这个函数将直接返回0,而当前进程不会 被wait_event_interruptible和从runqueue队列中删除。 2) 如果要被wait_event_interruptible的当前进程有nonblocked pending signals, 那么会直接返回-ERESTARTSYS(i.e. -512),当前进程不会 ...
下面是wait_event_timeout的几种典型用法示例: •示例1:等待事件直到超时 wait_event_timeout(wait_queue,condition,timeout); 这个用法表示等待条件condition成立,直到超过指定的超时时间timeout。 •示例2:等待事件直到超时或者被唤醒 wait_event_interruptible_timeout(wait_queue,condition,timeout); 与示例1类似...