wait_for_completion(&mycompletion); wait_for_completion_interruptible(&mycompletion); wait_for_completion_timeout(&mycompletion,timeout); 三者区别: wait_for_completion是不可中断的(non-interruptible),这意味着无论是否收到中断信号,当前线程都会一直等待完成量的完成。此外,该函数也没有超时功能,即使等待时...
* See also: complete(), wait_for_completion() (and friends _timeout, * _interruptible, _interruptible_timeout, and _killable), init_completion(), * reinit_completion(), and macros DECLARE_COMPLETION(), * DECLARE_COMPLETION_ONSTACK(). */ struct completion { unsigned int done; wait_queue_...
wait_for_completion用于等待完成量的释放,定义在kernel/sched/completion.c; do_wait_for_common(structcompletion *x,long(*action)(long),longtimeout,intstate) {if(!x->done) { DECLARE_WAITQUEUE(wait, current); __add_wait_queue_entry_tail_exclusive(&x->wait, &wait);do{if(signal_pending_stat...
在使用wait_for_completion()的_timeout()或_killable()/_interruptible()变体时,应特别小心,因为必须确保在所有相关活动(complete()或reinit_completion())发生之前不会发生内存释放,即使这些等待函数由于超时或信号触发而提前返回。 通过调用init_completion()来初始化动态分配的完成对象: init_completion(&dynamic_obj...
代码出现在三个地方:include/linux/wait.h , kernel/wait.c, kernel/sched.c。不用说wait.h是头文件,wait.c是实现的地方,而sched.c则体现了waitqueue的一种应用(实现completion)。为了更好地分析completion,我们还需要include/linux/completion.h。 waitqueue实现...
void wait_for_completion(struct completion *comp); wait_for_completion等待在completion上。如果加了interruptible,就表示线程等待可被外部发来的信号打断;如果加了killable,就表示线程只可被kill信号打断;如果加了timeout,表示等待超出一定时间会自动结束等待,timeout的单位是系统所用的时间片jiffies(多为1ms)。
wait_for_completion_*_timeout() can return: 0: if the wait timed out -ve: if the wait was interrupted +ve: if the completion was completed. As they currently return an 'unsigned long', the last two cases are not easily distinguished which can easily result in buggy code, as is the...
init_completion(&completion); b. 通过宏初始化 DECLARE_COMPLETION(completion); 3. 等待完成量 a. 直接等待 wait_for_completion() b. 超时等待 wait_for_completion_timeout() c. 中断等待,即当前的等待是可以被中断打断,并直接返回 wait_for_completion_interruptible() ...
#include<linux/completion> Struct completion done; Init_completion(&done); Wait_for_completion(&done); //死锁 Wait_for_completion_timeout(&done,timeout)://不死锁 超时则处理 Wait_for_completion_interruptible(&done);//可以被信号打断,如果当前进程受到TIF_SIGPENDING信号,则等待该完成量的进程会被从...
12. wait_for_completion_interruptible_timeout 函数原型: long __sched wait_for_completion_interruptible_timeout(struct completion *x,unsigned long timeout); 函数功能:等待一个具体任务的发生或者任务的超时。函数参数:x 结构completion的状态;timeout jiffies 超时时间。