Linux内核同步机制之completion(2)

void complete(struct completion *x)   {       unsigned long flags;          spin_lock_irqsave(&x->wait.lock, flags);       x->done++;       __wake_up_common(&x->wait, TASK_NORMAL, 1, 0, NULL);       spin_unlock_irqrestore(&x->wait.lock, flags);   }  

不看内核实现的源代码我们也能想到他的实现,不外乎在wait函数中循环等待done变为可用(正),而另一边的complete函数为唤醒函数,当然是将done加一,唤醒待处理的函数。是的,从上面的代码看到,和我们想的一样。内核也是这样做的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyypdw.html