我只是想知道,如果一个帖子在一个关键部分,是否可以被抢占?
如果主题A 被抢占,并且互斥锁被主题A 所困,那么可以做些什么?
答案 0 :(得分:6)
假设线程A被更高优先级的线程C抢占。现在假设线程B实际上比C更高优先级。如果B变为可运行,则有一个典型的优先级倒置情况;线程B(高优先级)卡在等待线程A持有的资源(低优先级)。对此的一种解决方法称为优先级继承。
使用优先级继承,当B阻塞A所持有的资源(临界区)时,线程A暂时'继承'线程B的优先级。这允许A抢占那个烦人的中优先级线程C,并且当A完成资源后,A回到原来的优先级。这可以说是B的方式,可以说是消除了死锁。
答案 1 :(得分:5)
当然可以被抢先一步。否则其他线程如何尝试进入该关键部分,如果允许在进程中运行的唯一线程是拥有关键部分的线程?
示例中的线程B将一直等到线程A被重新安排并完成crtical部分。这里不足为奇。如果在关键部分中,线程A也等待thead B拥有的互斥锁,则必须通过修改逻辑解决死锁问题。