linux内核线程阻塞唤醒过程理解

2017-01-11  本文已影响0人  内核恐慌

线程A阻塞过程如下:

检查条件不满足

将自身添加到等待队列,并将当前状态设置为阻塞

再次检查条件

       仍不满足,调度

释放资源

五个部分,线程能否真正阻塞取决于是否会进入第四部,且线程状态非RUNNING。

线程B可能在任何时刻进行如下动作

触发条件满足

唤醒所有等待条件满足的队列上的线程

分三种场景分析:

1

线程B在A第一次检查条件后使条件满足。

难道A第二次检查一定满足,不会调度。

2

线程B在A设置等待队列后将条件设置为满足,分析同上不会调度。

3

线程B在A第二次检查后设置条件。此时A一定会调度。但此时A已经加入到等待队列中,因此B在唤醒等待队列时一定会将A的状态改为RUNNING,则A一定会被唤醒。

上一篇下一篇

猜你喜欢

热点阅读