看板 C_and_CPP 關於我們 聯絡資訊
大家好,想請問一個問題,有一個UI畫面主程式(簡稱MAIN)有Multithread, 現在有一個函式庫LIB(簡稱libTest)裡面有兩個函式A跟B 都要對某個檔案(簡稱CONF)讀寫檔案,所以在libTest函式庫裡面用一個MUTEX全域變數 利用pthread_mutex_lock()在函式A跟B裡面鎖定。 而libTest函式A是被主程式MAIN直接呼叫(函式A從頭到尾都在pthread_mutex_lock裡面),而 libTest函式B則是被函式庫libTest裡面的函式C呼叫, 而且很密集的呼叫(函式C也是被UI主程式呼叫的), 函式B裡面分為三部份,則在中間的部份才有用pthread_mutex_lock與unlock,其餘兩部 份有做其他事情。 現在問題是當主程式一執行完(Multithread),UI畫面就會當掉,但是console還是能輸入 訊息,但是只有一個thread的時候就正常。 想問類似這種Multithread如何除錯才比較有效率,或是這部份那裡需要改進的呢? 跟libTest函式B很密集的被呼叫有關係嗎? 例如UI主程式的Pthread A呼叫函式庫的函式C,而函式C很密集呼叫函式B, 而函式B還沒有做完,而函式C又呼叫函式B了。 想請大家給點意見,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.109.155
linotwo:如果你的 debugger 有支援的話,當掉後暫停程式 05/01 04:05
linotwo:看各個 thread 的 callstack 停在哪個 function 05/01 04:06
linotwo:我想你可能會發現有 thread 一直等不到 mutex 之類的問題 05/01 04:08
troylee:既然是用 mutex, 我記得 gdb 去中斷可以看 mutex 被哪個 05/02 00:09
troylee:thread 取走... 05/02 00:10
troylee:semphore 就不行的樣子 05/02 00:10