进程调度API之complete_all

来源:互联网 发布:世界中心知乎 编辑:程序博客网 时间:2024/06/06 02:25
void complete_all(struct completion *x)的作用和complete的作用区别在于complete_all会唤醒在struct completion *x上等待的所有的task,而complete 只能wakeup一个task其源码分析如下:void complete_all(struct completion *x){unsigned long flags;spin_lock_irqsave(&x->wait.lock, flags);x->done = UINT_MAX;__wake_up_locked(&x->wait, TASK_NORMAL, 0);spin_unlock_irqrestore(&x->wait.lock, flags);}可以看到x->done 和complete 相比不再执行加1操作,而是直接赋予最大值然后调用__wake_up_locked,其第三个参数nr 为0 表示wakeup 所有的task。原因在上一篇博文中已经分析过了。

原创粉丝点击