请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于线程、锁和CPU调度的问题

假设有五个线程等待CPU的调度,五个线程需要去争夺一把互斥锁,假设被线程1拿到了,则线程2、3、4、5都处于Blocked状态,但是由于线程1运行比较耗时,在一个时间片中没有运行完,线程1应该就会失去cpu的调度,进入阻塞状态,此时线程1会释放锁吗?如果不释放锁,当cpu重新调度时,是否只能执行线程1?即只有当线程1运行完毕且释放锁之后其他线程才可能拿到锁,得到cpu的执行权。拿到锁的那个线程会独得cpu恩宠,直到运行完毕,不管她占用了多少的时间片。

正在回答 回答被采纳积分+3

1回答

悟空 2021-11-11 14:05:00

失去cpu的调度,进入阻塞状态,此时线程1不会释放锁,当线程1运行完毕且释放锁之后其他线程才可能拿到锁,得到cpu的执行权。阻塞时,不会浪费CPU。

0 回复 有任何疑惑可以回复我~
  • 失去cpu调度,线程状态应该是Runnable状态才对?(因为我看线程状态流程图,并没有因为失去cpu的调度而进入阻塞(包括blocked,waitting,timed_waitting)状态的流程)
    回复 有任何疑惑可以回复我~ 2022-12-21 10:24:04
  • 悟空 回复 慕沐3053333 #2
    失去cpu的调度是背后的动作,隐含在进入阻塞状态的动作里,比如执行wait方法,就会导致失去cpu的调度
    回复 有任何疑惑可以回复我~ 2022-12-21 12:14:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信