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...
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...
int wait_for_completion_interruptible(struct completion* comp) 该函数等待一个完成量被唤醒。但是它可以被外部信号打断; int wait_for_completion_killable(struct completion* comp) 该函数等待一个完成量被唤醒。但是它可以被kill信号打断; unsigned long wait_for_completion_timeout(struct completion* comp, unsi...
init_completion(&completion); b. 通过宏初始化 DECLARE_COMPLETION(completion); 3. 等待完成量 a. 直接等待 wait_for_completion() b. 超时等待 wait_for_completion_timeout() c. 中断等待,即当前的等待是可以被中断打断,并直接返回 wait_for_completion_interruptible() ...
wait_for_completion等待在completion上。如果加了interruptible,就表示线程等待可被外部发来的信号打断;如果加了killable,就表示线程只可被kill信号打断;如果加了timeout,表示等待超出一定时间会自动结束等待,timeout的单位是系统所用的时间片jiffies(多为1ms)。
`wait_event_interruptible`宏允许进程在被中断时返回特定错误代码,而`wait_event_interruptible_timeout`则结合了超时功能。`wake_up`系列函数用于唤醒等待队列中的进程,包括单个或所有进程。Linux内核提供五种进程状态,等待队列与这些状态紧密关联。使用等待队列前,定义等待队列头并使用`wait_event_*`...