我只是想知道,如果一个线程在一个关键的部分,它能被抢占吗?
如果线程A抢占了,所以互斥锁被线程A卡住了,那么该怎么办呢?
发布于 2010-03-03 00:26:01
当然可以先发制人。否则,如果进程中唯一允许运行的线程是拥有关键部分的线程,那么其他线程如何尝试进入该关键部分?
在您的示例中,线程B将等待线程A被重新安排并使用crtical部分完成。这里没什么好惊讶的。如果线程A,在关键部分,也在等待头B拥有的互斥对象,那么这是一个死锁,必须通过修改逻辑来解决。
发布于 2010-03-03 01:55:53
假设线程A被高优先级线程C抢占。现在假设线程B的优先级实际上高于C。如果B变为可运行的,则有一个典型的优先级反转情况;线程B(高优先级)被困在等待线程A(低优先级)持有的资源。解决这一问题的方法之一是优先级继承。
使用优先级继承,当B块用于A(关键部分)所持有的资源时,线程A暂时“继承”线程B的优先级。这允许A抢占这个麻烦的中优先级线程C,当A使用该资源完成时,A返回到原来的优先级。可以说,这能让A摆脱B的障碍,消除死锁。
https://stackoverflow.com/questions/2367851
复制相似问题