多執行緒死鎖的原因,用GDB如何除錯

2021-10-11 20:05:39 字數 608 閱讀 6999

在找工作中,面試問到了這個,啥也不會,現在記錄一下

多執行緒死鎖的原因是多個執行緒同時被阻塞,它們中的乙個或全部都在等待某個資源被釋放,而該資源又被其他執行緒鎖定。

產生死鎖的四個必要條件:

死鎖原因:

避免死鎖方法:

/*

死鎖除錯

1) -g引數

<1> 查詢程序id,即pid

ps -e | grep a.out

<2> 啟動 gdb attach 程序

gdb a.out 12826 // 12826是pid

info threads //顯示所有執行緒資訊

thread 2 // 選擇進入第二個執行緒

bt //檢視執行緒2的堆疊,可以發現該執行緒堵塞在lock.c第17行

GDB除錯多執行緒及死鎖

參考文章 我在這裡總結一下 檢視正在執行的所有執行緒info threads 切換到指定執行緒thread id 這裡的id是info threads後各執行緒前面的序號 break thread test.c 123 thread all 在所有執行緒中相應的行上設定斷點 除錯死鎖流程 開啟cor...

gdb除錯多執行緒出現的死鎖

多執行緒的條件下,程式很容易出現死鎖,此時各個執行緒處於等待狀態,可以通過gdb除錯找到死鎖出現的地方。例子 include include include pthread mutex t locka pthread mutex initializer pthread mutex t lockb p...

多執行緒死鎖的產生以及如何避免死鎖

產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生。互斥條件 程序要求對所分配的資源 如印表機 進行排他性控制,即在一段時間內某資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。不剝奪條件 程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能 ...