開始之前,您必須先完成練習 1.2:收集執行緒資料。
「執行緒視圖」會顯示應用程式中所有執行緒的狀態,並且明確地指出死結和競用。
如果要尋找瓶頸,請執行下列動作:
執行緒之間的垂直箭頭是我們感興趣的地方。單向箭頭指出一個執行緒(箭頭起源處的執行緒)正在等待另一個執行緒(箭頭指向的執行緒)釋放鎖定。 雙向箭頭表示兩個執行緒處於死結狀態,彼此正在等待對方釋放鎖定。
程式啟動之後,會立即連續建立四個 philo* 執行緒。每個執行緒執行一小段時間之後會要求鎖定。 要求未順利完成。當前三個鎖定要求失敗時, 執行緒會進入等待鎖定狀態。當第四個執行緒的鎖定要求失敗時,會發生死結, 並且顯示會指出這四個執行緒全部處於死結狀態。
philo* 執行緒正在等待其他 philo* 執行緒的鎖定,
而後者也正在等待鎖定。在此情況下,我們得到死結:程式會停滯不前。
附註:將游標暫停在特定執行緒區段上,
您可以看到鎖定要求、死結及其他狀態的特定資訊。這個顯示的工具要訣會指定像是鎖定名稱,
並識別持有鎖定的執行緒(「鎖定的執行緒」)等資訊。
現在您瞭解這個死結發生的原因,已準備好開始進行練習 1.4:解決執行緒瓶頸。