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

线程A阻塞过程如下:


检查条件不满足

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

再次检查条件

       仍不满足,调度

释放资源


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


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

触发条件满足

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


分三种场景分析:

1

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

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

2

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

3

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,818评论 1 17
  • 一、多线程 说明下线程的状态 java中的线程一共有 5 种状态。 NEW:这种情况指的是,通过 New 关键字创...
    Java旅行者阅读 4,722评论 0 44
  • 暗夜无边的蔓延 多想听听你的声音 电话应该无人接听 我想忘记你拒绝的语气 说什么两相不配 谁给我们的爱上了锁 深爱...
    GZ徐阅读 225评论 4 2
  • 本篇是在Android Studio NDK:二、JNI 返回JAVA 实体的基础上进行的; 1.新建Androi...
    JayQiu阅读 2,534评论 0 3
  • 拆迁老房 修修补补 补补修修 难换新貌
    且惜且爱阅读 122评论 0 6