首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是什么时候发生的?处于临界段时挂起的线程

这是什么时候发生的?处于临界段时挂起的线程
EN

Stack Overflow用户
提问于 2010-03-02 23:58:13
回答 2查看 1.1K关注 0票数 4

我只是想知道,如果一个线程在一个关键的部分,它能被抢占吗?

  • Thread A:输入CR
  • Thread A:Get suspended
  • Thread B:想输入CR但不能输入,因为Thread A有锁

如果线程A抢占了,所以互斥锁被线程A卡住了,那么该怎么办呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-03 00:26:01

当然可以先发制人。否则,如果进程中唯一允许运行的线程是拥有关键部分的线程,那么其他线程如何尝试进入该关键部分?

在您的示例中,线程B将等待线程A被重新安排并使用crtical部分完成。这里没什么好惊讶的。如果线程A,在关键部分,也在等待头B拥有的互斥对象,那么这是一个死锁,必须通过修改逻辑来解决。

票数 5
EN

Stack Overflow用户

发布于 2010-03-03 01:55:53

假设线程A被高优先级线程C抢占。现在假设线程B的优先级实际上高于C。如果B变为可运行的,则有一个典型的优先级反转情况;线程B(高优先级)被困在等待线程A(低优先级)持有的资源。解决这一问题的方法之一是优先级继承。

使用优先级继承,当B块用于A(关键部分)所持有的资源时,线程A暂时“继承”线程B的优先级。这允许A抢占这个麻烦的中优先级线程C,当A使用该资源完成时,A返回到原来的优先级。可以说,这能让A摆脱B的障碍,消除死锁。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2367851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档