wait_for_completion(&mycompletion); wait_for_completion_interruptible(&mycompletion); wait_for_completion_timeout(&mycompletion,timeout); 三者区别: wait_for_completion是不可中断的(non-interruptible),这意味着无论是否收到中断信号,当前线程都会一直等待完成量的完成。此外,该函数也没有超时功能,即使等待时...
* the "completion" event. * * 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 { ...
* 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_...
1externvoidwait_for_completion(structcompletion *);2externvoidwait_for_completion_io(structcompletion *);3externintwait_for_completion_interruptible(structcompletion *x);4externintwait_for_completion_killable(structcompletion *x);5externunsignedlongwait_for_completion_timeout(structcompletion *x,6unsigned...
static inline void init_completion(struct completion *x) { x->done = 0; init_waitqueue_head(&x->wait); } 要等待completion,可进行如下调用: void wait_for_completion(struct completion *c); 触发completion事件,调用: void complete(struct completion *c); //唤醒一个等待线程 ...
static inline void init_completion(struct completion *x) { x->done = 0; init_waitqueue_head(&x->wait); } 要等待completion,可进行如下调用: void wait_for_completion(struct completion *c); 触发completion事件,调用: void complete(struct completion *c); //唤醒一个等待线程 ...
static inline void init_completion(struct completion *x) { x->done = 0; init_waitqueue_head(&x->wait); } 要等待completion,可进行如下调用: void wait_for_completion(struct completion *c); 触发completion事件,调用: void complete(struct completion *c); //唤醒一个等待线程 ...
wait_for_completion最终由下面函数实现: staticinline long __scheddo_wait_for_common(struct completion*x,long timeout,int state){if(!x->done){DECLARE_WAITQUEUE(wait,current);wait.flags|=WQ_FLAG_EXCLUSIVE;__add_wait_queue_tail(&x->wait,&wait);do{if(signal_pending_state(state,current)){ti...
同步函数一般都成对出现,completion也不例外,我们看看最基本的两个complete和wait_for_completion函数的实现。 wait_for_completion最终由下面函数实现: 代码语言:javascript 复制 staticinline long __scheddo_wait_for_common(struct completion*x,long timeout,int state){if(!x->done){DECLARE_WAITQUEUE(wait,curr...
* wait_for_completion: - waits for completion of a task * @x: holds the state of this particular completion * * This waits to be signaled for completion of a specific task. It is NOT * interruptible and there is no timeout.