美文网首页
linux内核线程阻塞唤醒过程理解

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

作者: 内核恐慌 | 来源:发表于2017-01-11 22:40 被阅读0次

    线程A阻塞过程如下:

    检查条件不满足

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

    再次检查条件

           仍不满足,调度

    释放资源

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

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

    触发条件满足

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

    分三种场景分析:

    1

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

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

    2

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

    3

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

    相关文章

      网友评论

          本文标题:linux内核线程阻塞唤醒过程理解

          本文链接:https://www.haomeiwen.com/subject/xqtdbttx.html