2010-03-02 14 views
3

我只是想知道,如果一個線程處於臨界區,它是否可以被搶佔?這是什麼時候發生的?線程在臨界區暫停

  • 線程A:輸入CR
  • 線程A:禁賽
  • 線程B:想進入CR但是不能,因爲線程A有鎖

如果線程A搶先了,等互斥鎖卡住了wi th 主題A,可以做些什麼呢?

+2

我沒有看到什麼是尖叫... – 2010-03-03 00:01:08

+0

我不得不尖叫。 – bobobobo 2010-03-03 00:12:17

回答

5

當然,它可以被搶佔。否則,其他線程如何嘗試進入該關鍵部分,如果允許在進程中運行的唯一線程是擁有關鍵部分的線程?

在你的例子中的線程B將等待線程A重新安排並完成了crtical部分。這裏毫不奇怪。而且,如果線程A在關鍵部分中等待B所擁有的互斥鎖,那麼這是一個死鎖,您必須通過修改您的邏輯來解決這個問題。

6

假設線程A被更高優先級的線程C搶佔。現在假設線程B實際上比C更高的優先級。如果B成爲可運行的,那麼你有一個典型的優先級倒置的情況;線程B(高優先級)等待線程A佔用的資源(低優先級)。一種治療方法稱爲優先繼承。

通過優先級繼承,當B爲A所佔用的資源(臨界區)阻塞時,線程A暫時'繼承'線程B的優先級。這允許A搶佔那個令人煩惱的中等優先級線程C,以及何時A用資源完成,A回到原來的優先級。這可以讓A擺脫B的方式,可以說,消除了死鎖。

+0

很好的答案,謝謝。 – 4pie0 2017-05-07 22:58:08