[討論] Multithread讀寫檔案

看板C_and_CPP (C/C++)作者 (就是愛希爾)時間14年前 (2012/05/01 02:38), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
大家好,想請問一個問題,有一個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

05/01 04:05, , 1F
如果你的 debugger 有支援的話,當掉後暫停程式
05/01 04:05, 1F

05/01 04:06, , 2F
看各個 thread 的 callstack 停在哪個 function
05/01 04:06, 2F

05/01 04:08, , 3F
我想你可能會發現有 thread 一直等不到 mutex 之類的問題
05/01 04:08, 3F

05/02 00:09, , 4F
既然是用 mutex, 我記得 gdb 去中斷可以看 mutex 被哪個
05/02 00:09, 4F

05/02 00:10, , 5F
thread 取走...
05/02 00:10, 5F

05/02 00:10, , 6F
semphore 就不行的樣子
05/02 00:10, 6F
文章代碼(AID): #1FdjmQG8 (C_and_CPP)
文章代碼(AID): #1FdjmQG8 (C_and_CPP)