作者HILL33LOVE (就是愛希爾)
看板C_and_CPP
標題[討論] Multithread讀寫檔案
時間Tue May 1 02:38:15 2012
大家好,想請問一個問題,有一個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